home *** CD-ROM | disk | FTP | other *** search
/ BBS in a Box 3 / BBS in a box - Trilogy III.iso / Files / Tele / C / Comet2.1.3 Folder / Comet / zap.asm < prev   
Encoding:
Assembly Source File  |  1991-02-07  |  56.4 KB  |  4,065 lines  |  [TEXT/????]

  1. ;    Copyright Cornell University 1986.  All rights are reserved.
  2. ;    9/2/87 kevin changed some names to make new compiler happy 
  3. ;    5/25/89 kevin removed link a6, commented
  4.  
  5. ; 10/13/89 kevin fixed lpos cases so spaces are skipped--10% speed increase!
  6. ;        removed space case from zapchar for vt100 invert case
  7. ;        added underline support for vt100 
  8. ;        speeded zapchar by eliminating clr.l & long offsets
  9. ; 1/22/91 
  10. ;        modified zapline/clrit for library char set so top 2 lines of
  11. ;        font appear...
  12. ; 2/6/91
  13. ;        added SwapMMUMode calls so IIci/si etc. work with 2-page displays
  14. ;        fastscroll() & fastindex() called within emulator, so mode already OK
  15. ;        hey, it doesn't work!  
  16.  
  17.         public    _zapchar
  18.         public    zapline
  19.         public    _zapbuf
  20.         public    _clrit
  21.         public    _clr11
  22.         public    _vtzapline
  23.         public    _fastscroll
  24.         public    _fastindex
  25.  
  26.         public    _font
  27.         public    _boldfont
  28.         public    _invfont
  29.         public    _zapuline
  30.         public    _zapinvert
  31.         public  _skiptest
  32.         public  _chofftab9
  33.         public  _chofftab12
  34.  
  35.         public  _long1
  36.         public  _long2
  37.         public  _long3
  38.         public  _long4
  39.  
  40.         public  _fontarr
  41.         public  _fontskiparr
  42.         public  _skiparr
  43.         public  _allskiparr
  44.  
  45. ; per window vars
  46.         public    _thefont
  47.         public    _xpos
  48.         public  _ypos
  49.         public    _modflg
  50.         public    _clrflg
  51.         public    _screenbytes
  52.         public    _screenrem
  53.         public  _startarr
  54.         public  _fontwidth
  55.  
  56. ;;    Copyright Cornell University 1986.  All rights are reserved.
  57.  
  58.     cseg
  59.  
  60.     ; the spos# routines do the 8 variations on blanking a 6-bit wide char
  61. ; 8 macros which blank a space in the 8 character positions 
  62. ;    possible w/ a 6-bit wide font
  63.  
  64.     
  65.     macro     spos0
  66.  
  67.     add.w    #%1,a2                ; a2 += offset
  68.     move.w    #$ffc0,d0
  69.     tst.b    _zapinvert
  70.     bne.s    %2
  71.     
  72.     and.w    d0,(a2)
  73.     add.w    d3,a2
  74.     and.w    d0,(a2)
  75.     add.w    d3,a2
  76.     and.w    d0,(a2)
  77.     add.w    d3,a2
  78.     and.w    d0,(a2)
  79.     add.w    d3,a2
  80.     and.w    d0,(a2)
  81.     add.w    d3,a2
  82.     and.w    d0,(a2)
  83.     add.w    d3,a2
  84.     and.w    d0,(a2)
  85.     add.w    d3,a2
  86.     and.w    d0,(a2)
  87.     add.w    d3,a2
  88.     and.w    d0,(a2)
  89.     add.w    d3,a2
  90.     and.w    d0,(a2)
  91.     add.w    d3,a2
  92.     and.w    d0,(a2)
  93.     add.w    d3,a2
  94.     and.w    d0,(a2)
  95.  
  96.     tst.b    _zapuline
  97.     bne        underline
  98.  
  99.     rts
  100.  
  101. %2
  102.     eor.w    #$ffff,d0            ; invert the clear mask
  103.     or.w    d0,(a2)
  104.     add.w    d3,a2
  105.     or.w    d0,(a2)
  106.     add.w    d3,a2
  107.     or.w    d0,(a2)
  108.     add.w    d3,a2
  109.     or.w    d0,(a2)
  110.     add.w    d3,a2
  111.     or.w    d0,(a2)
  112.     add.w    d3,a2
  113.     or.w    d0,(a2)
  114.     add.w    d3,a2
  115.     or.w    d0,(a2)
  116.     add.w    d3,a2
  117.     or.w    d0,(a2)
  118.     add.w    d3,a2
  119.     or.w    d0,(a2)
  120.     add.w    d3,a2
  121.     or.w    d0,(a2)
  122.     add.w    d3,a2
  123.     or.w    d0,(a2)
  124.     add.w    d3,a2
  125.     or.w    d0,(a2)
  126.  
  127.     eor.w    #$ffff,d0
  128.     tst.b    _zapuline
  129.     bne        underline
  130.  
  131.     rts
  132.     endm
  133.  
  134.  
  135.     macro     spos1
  136.  
  137.     add.w    #%1,a2
  138.     move.w    #$3ff,d0
  139.     tst.b    _zapinvert
  140.     bne.s    %2
  141.     
  142.     and.w    d0,(a2)
  143.     add.w    d3,a2
  144.     and.w    d0,(a2)
  145.     add.w    d3,a2
  146.     and.w    d0,(a2)
  147.     add.w    d3,a2
  148.     and.w    d0,(a2)
  149.     add.w    d3,a2
  150.     and.w    d0,(a2)
  151.     add.w    d3,a2
  152.     and.w    d0,(a2)
  153.     add.w    d3,a2
  154.     and.w    d0,(a2)
  155.     add.w    d3,a2
  156.     and.w    d0,(a2)
  157.     add.w    d3,a2
  158.     and.w    d0,(a2)
  159.     add.w    d3,a2
  160.     and.w    d0,(a2)
  161.     add.w    d3,a2
  162.     and.w    d0,(a2)
  163.     add.w    d3,a2
  164.     and.w    d0,(a2)
  165.  
  166.     tst.b    _zapuline
  167.     bne        underline
  168.  
  169.     rts
  170. %2
  171.     eor.w    #$ffff,d0            ; invert the clear mask
  172.     or.w    d0,(a2)
  173.     add.w    d3,a2
  174.     or.w    d0,(a2)
  175.     add.w    d3,a2
  176.     or.w    d0,(a2)
  177.     add.w    d3,a2
  178.     or.w    d0,(a2)
  179.     add.w    d3,a2
  180.     or.w    d0,(a2)
  181.     add.w    d3,a2
  182.     or.w    d0,(a2)
  183.     add.w    d3,a2
  184.     or.w    d0,(a2)
  185.     add.w    d3,a2
  186.     or.w    d0,(a2)
  187.     add.w    d3,a2
  188.     or.w    d0,(a2)
  189.     add.w    d3,a2
  190.     or.w    d0,(a2)
  191.     add.w    d3,a2
  192.     or.w    d0,(a2)
  193.     add.w    d3,a2
  194.     or.w    d0,(a2)
  195.  
  196.     eor.w    #$ffff,d0
  197.     tst.b    _zapuline
  198.     bne        underline
  199.  
  200.     rts
  201.     endm
  202.  
  203.     macro     spos2
  204.  
  205.     add.w    #%1,a2
  206.     move.w    #$fc0f,d0
  207.     tst.b    _zapinvert
  208.     bne.s    %2
  209.     
  210.     and.w    d0,(a2)
  211.     add.w    d3,a2
  212.     and.w    d0,(a2)
  213.     add.w    d3,a2
  214.     and.w    d0,(a2)
  215.     add.w    d3,a2
  216.     and.w    d0,(a2)
  217.     add.w    d3,a2
  218.     and.w    d0,(a2)
  219.     add.w    d3,a2
  220.     and.w    d0,(a2)
  221.     add.w    d3,a2
  222.     and.w    d0,(a2)
  223.     add.w    d3,a2
  224.     and.w    d0,(a2)
  225.     add.w    d3,a2
  226.     and.w    d0,(a2)
  227.     add.w    d3,a2
  228.     and.w    d0,(a2)
  229.     add.w    d3,a2
  230.     and.w    d0,(a2)
  231.     add.w    d3,a2
  232.     and.w    d0,(a2)
  233.  
  234.     tst.b    _zapuline
  235.     bne        underline
  236.  
  237.     rts
  238. %2
  239.     eor.w    #$ffff,d0            ; invert the clear mask
  240.     or.w    d0,(a2)
  241.     add.w    d3,a2
  242.     or.w    d0,(a2)
  243.     add.w    d3,a2
  244.     or.w    d0,(a2)
  245.     add.w    d3,a2
  246.     or.w    d0,(a2)
  247.     add.w    d3,a2
  248.     or.w    d0,(a2)
  249.     add.w    d3,a2
  250.     or.w    d0,(a2)
  251.     add.w    d3,a2
  252.     or.w    d0,(a2)
  253.     add.w    d3,a2
  254.     or.w    d0,(a2)
  255.     add.w    d3,a2
  256.     or.w    d0,(a2)
  257.     add.w    d3,a2
  258.     or.w    d0,(a2)
  259.     add.w    d3,a2
  260.     or.w    d0,(a2)
  261.     add.w    d3,a2
  262.     or.w    d0,(a2)
  263.  
  264.     eor.w    #$ffff,d0
  265.     tst.b    _zapuline
  266.     bne        underline
  267.  
  268.     rts
  269.     endm
  270.  
  271.     macro     spos3
  272.  
  273.     add.w    #%1,a2
  274.     move.l    #$fff03fff,d0
  275.     tst.b    _zapinvert
  276.     bne.s    %2
  277.     
  278.     and.l    d0,(a2)
  279.     add.w    d3,a2
  280.     and.l    d0,(a2)
  281.     add.w    d3,a2
  282.     and.l    d0,(a2)
  283.     add.w    d3,a2
  284.     and.l    d0,(a2)
  285.     add.w    d3,a2
  286.     and.l    d0,(a2)
  287.     add.w    d3,a2
  288.     and.l    d0,(a2)
  289.     add.w    d3,a2
  290.     and.l    d0,(a2)
  291.     add.w    d3,a2
  292.     and.l    d0,(a2)
  293.     add.w    d3,a2
  294.     and.l    d0,(a2)
  295.     add.w    d3,a2
  296.     and.l    d0,(a2)
  297.     add.w    d3,a2
  298.     and.l    d0,(a2)
  299.     add.w    d3,a2
  300.     and.l    d0,(a2)
  301.  
  302.     tst.b    _zapuline
  303.     bne        lunderline
  304.  
  305.     rts
  306. %2
  307.     eor.l    #$ffffffff,d0            ; invert the clear mask
  308.     or.l    d0,(a2)
  309.     add.w    d3,a2
  310.     or.l    d0,(a2)
  311.     add.w    d3,a2
  312.     or.l    d0,(a2)
  313.     add.w    d3,a2
  314.     or.l    d0,(a2)
  315.     add.w    d3,a2
  316.     or.l    d0,(a2)
  317.     add.w    d3,a2
  318.     or.l    d0,(a2)
  319.     add.w    d3,a2
  320.     or.l    d0,(a2)
  321.     add.w    d3,a2
  322.     or.l    d0,(a2)
  323.     add.w    d3,a2
  324.     or.l    d0,(a2)
  325.     add.w    d3,a2
  326.     or.l    d0,(a2)
  327.     add.w    d3,a2
  328.     or.l    d0,(a2)
  329.     add.w    d3,a2
  330.     or.l    d0,(a2)
  331.  
  332.     eor.l    #$ffffffff,d0            ; invert the clear mask
  333.     tst.b    _zapuline
  334.     bne        lunderline
  335.  
  336.     rts
  337.     endm
  338.  
  339.     macro     spos4
  340.  
  341.     add.w    #%1,a2
  342.     move.w    #$c0ff,d0
  343.     tst.b    _zapinvert
  344.     bne.s    %2
  345.     
  346.     and.w    d0,(a2)
  347.     add.w    d3,a2
  348.     and.w    d0,(a2)
  349.     add.w    d3,a2
  350.     and.w    d0,(a2)
  351.     add.w    d3,a2
  352.     and.w    d0,(a2)
  353.     add.w    d3,a2
  354.     and.w    d0,(a2)
  355.     add.w    d3,a2
  356.     and.w    d0,(a2)
  357.     add.w    d3,a2
  358.     and.w    d0,(a2)
  359.     add.w    d3,a2
  360.     and.w    d0,(a2)
  361.     add.w    d3,a2
  362.     and.w    d0,(a2)
  363.     add.w    d3,a2
  364.     and.w    d0,(a2)
  365.     add.w    d3,a2
  366.     and.w    d0,(a2)
  367.     add.w    d3,a2
  368.     and.w    d0,(a2)
  369.  
  370.     tst.b    _zapuline
  371.     bne        underline
  372.  
  373.     rts
  374. %2
  375.     eor.w    #$ffff,d0            ; invert the clear mask
  376.     or.w    d0,(a2)
  377.     add.w    d3,a2
  378.     or.w    d0,(a2)
  379.     add.w    d3,a2
  380.     or.w    d0,(a2)
  381.     add.w    d3,a2
  382.     or.w    d0,(a2)
  383.     add.w    d3,a2
  384.     or.w    d0,(a2)
  385.     add.w    d3,a2
  386.     or.w    d0,(a2)
  387.     add.w    d3,a2
  388.     or.w    d0,(a2)
  389.     add.w    d3,a2
  390.     or.w    d0,(a2)
  391.     add.w    d3,a2
  392.     or.w    d0,(a2)
  393.     add.w    d3,a2
  394.     or.w    d0,(a2)
  395.     add.w    d3,a2
  396.     or.w    d0,(a2)
  397.     add.w    d3,a2
  398.     or.w    d0,(a2)
  399.  
  400.     eor.w    #$ffff,d0            ; invert the clear mask
  401.     tst.b    _zapuline
  402.     bne        underline
  403.  
  404.     rts
  405.     endm
  406.  
  407.     macro     spos5
  408.  
  409.     add.w    #%1,a2
  410.     move.w    #$ff03,d0
  411.     tst.b    _zapinvert
  412.     bne.s    %2
  413.     
  414.     and.w    d0,(a2)
  415.     add.w    d3,a2
  416.     and.w    d0,(a2)
  417.     add.w    d3,a2
  418.     and.w    d0,(a2)
  419.     add.w    d3,a2
  420.     and.w    d0,(a2)
  421.     add.w    d3,a2
  422.     and.w    d0,(a2)
  423.     add.w    d3,a2
  424.     and.w    d0,(a2)
  425.     add.w    d3,a2
  426.     and.w    d0,(a2)
  427.     add.w    d3,a2
  428.     and.w    d0,(a2)
  429.     add.w    d3,a2
  430.     and.w    d0,(a2)
  431.     add.w    d3,a2
  432.     and.w    d0,(a2)
  433.     add.w    d3,a2
  434.     and.w    d0,(a2)
  435.     add.w    d3,a2
  436.     and.w    d0,(a2)
  437.  
  438.     tst.b    _zapuline
  439.     bne        underline
  440.  
  441.     rts
  442. %2
  443.     eor.w    #$ffff,d0            ; invert the clear mask
  444.     or.w    d0,(a2)
  445.     add.w    d3,a2
  446.     or.w    d0,(a2)
  447.     add.w    d3,a2
  448.     or.w    d0,(a2)
  449.     add.w    d3,a2
  450.     or.w    d0,(a2)
  451.     add.w    d3,a2
  452.     or.w    d0,(a2)
  453.     add.w    d3,a2
  454.     or.w    d0,(a2)
  455.     add.w    d3,a2
  456.     or.w    d0,(a2)
  457.     add.w    d3,a2
  458.     or.w    d0,(a2)
  459.     add.w    d3,a2
  460.     or.w    d0,(a2)
  461.     add.w    d3,a2
  462.     or.w    d0,(a2)
  463.     add.w    d3,a2
  464.     or.w    d0,(a2)
  465.     add.w    d3,a2
  466.     or.w    d0,(a2)
  467.  
  468.     eor.w    #$ffff,d0            ; invert the clear mask
  469.     tst.b    _zapuline
  470.     bne        underline
  471.  
  472.     rts
  473.     endm
  474.  
  475.     macro     spos6
  476.  
  477.     add.w    #%1,a2
  478.     move.l    #$fffc0fff,d0
  479.     tst.b    _zapinvert
  480.     bne.s    %2
  481.     
  482.     and.l    d0,(a2)
  483.     add.w    d3,a2
  484.     and.l    d0,(a2)
  485.     add.w    d3,a2
  486.     and.l    d0,(a2)
  487.     add.w    d3,a2
  488.     and.l    d0,(a2)
  489.     add.w    d3,a2
  490.     and.l    d0,(a2)
  491.     add.w    d3,a2
  492.     and.l    d0,(a2)
  493.     add.w    d3,a2
  494.     and.l    d0,(a2)
  495.     add.w    d3,a2
  496.     and.l    d0,(a2)
  497.     add.w    d3,a2
  498.     and.l    d0,(a2)
  499.     add.w    d3,a2
  500.     and.l    d0,(a2)
  501.     add.w    d3,a2
  502.     and.l    d0,(a2)
  503.     add.w    d3,a2
  504.     and.l    d0,(a2)
  505.  
  506.     tst.b    _zapuline
  507.     bne        lunderline
  508.  
  509.     rts
  510. %2
  511.     eor.l    #$ffffffff,d0            ; invert the clear mask
  512.     or.l    d0,(a2)
  513.     add.w    d3,a2
  514.     or.l    d0,(a2)
  515.     add.w    d3,a2
  516.     or.l    d0,(a2)
  517.     add.w    d3,a2
  518.     or.l    d0,(a2)
  519.     add.w    d3,a2
  520.     or.l    d0,(a2)
  521.     add.w    d3,a2
  522.     or.l    d0,(a2)
  523.     add.w    d3,a2
  524.     or.l    d0,(a2)
  525.     add.w    d3,a2
  526.     or.l    d0,(a2)
  527.     add.w    d3,a2
  528.     or.l    d0,(a2)
  529.     add.w    d3,a2
  530.     or.l    d0,(a2)
  531.     add.w    d3,a2
  532.     or.l    d0,(a2)
  533.     add.w    d3,a2
  534.     or.l    d0,(a2)
  535.  
  536.     eor.l    #$ffffffff,d0            ; invert the clear mask
  537.     tst.b    _zapuline
  538.     bne        lunderline
  539.  
  540.     rts
  541.     endm
  542.  
  543.  
  544.     macro     spos7
  545.  
  546.     add.w    #%1,a2
  547.     move.w    #$f03f,d0
  548.     tst.b    _zapinvert
  549.     bne.s    %2
  550.     
  551.     and.w    d0,(a2)
  552.     add.w    d3,a2
  553.     and.w    d0,(a2)
  554.     add.w    d3,a2
  555.     and.w    d0,(a2)
  556.     add.w    d3,a2
  557.     and.w    d0,(a2)
  558.     add.w    d3,a2
  559.     and.w    d0,(a2)
  560.     add.w    d3,a2
  561.     and.w    d0,(a2)
  562.     add.w    d3,a2
  563.     and.w    d0,(a2)
  564.     add.w    d3,a2
  565.     and.w    d0,(a2)
  566.     add.w    d3,a2
  567.     and.w    d0,(a2)
  568.     add.w    d3,a2
  569.     and.w    d0,(a2)
  570.     add.w    d3,a2
  571.     and.w    d0,(a2)
  572.     add.w    d3,a2
  573.     and.w    d0,(a2)
  574.  
  575.     tst.b    _zapuline
  576.     bne        underline
  577.  
  578.     rts
  579. %2
  580.     eor.w    #$ffff,d0            ; invert the clear mask
  581.     or.w    d0,(a2)
  582.     add.w    d3,a2
  583.     or.w    d0,(a2)
  584.     add.w    d3,a2
  585.     or.w    d0,(a2)
  586.     add.w    d3,a2
  587.     or.w    d0,(a2)
  588.     add.w    d3,a2
  589.     or.w    d0,(a2)
  590.     add.w    d3,a2
  591.     or.w    d0,(a2)
  592.     add.w    d3,a2
  593.     or.w    d0,(a2)
  594.     add.w    d3,a2
  595.     or.w    d0,(a2)
  596.     add.w    d3,a2
  597.     or.w    d0,(a2)
  598.     add.w    d3,a2
  599.     or.w    d0,(a2)
  600.     add.w    d3,a2
  601.     or.w    d0,(a2)
  602.     add.w    d3,a2
  603.     or.w    d0,(a2)
  604.  
  605.     eor.w    #$ffff,d0            ; invert the clear mask
  606.     tst.b    _zapuline
  607.     bne        underline
  608.  
  609.     rts
  610.     endm
  611.  
  612.  
  613.     ; the cpos# macros do the 8 variations on drawing a 6-bit wide char;
  614.     ; the AND blanks the character position while the OR puts in the new char
  615.     ; if zapuline is true, do an underline
  616.     
  617.     ; entry
  618.     ; macro arg = bit offset from horizontal origin
  619.     ; a0 -> font *
  620.     ; d0 = offset of char in font
  621.  
  622.     ; exit
  623.     ; a1 -> character in font
  624.     ; a2 -> current line in bitmap
  625.     ; d0 = mask for this char position
  626.     ; d1 = one line of the char
  627.     
  628. return:
  629.     rts
  630.     
  631. underline:
  632.     sub.w    d3,a2
  633.     tst.b    _zapinvert            ; is thefont inverted?
  634.     bne.s    underclear            ; 
  635.     eor.w    #$ffff,d0            ; invert the clear mask
  636.     or.w    d0,(a2)
  637.     rts
  638.     
  639. underclear:
  640.     and.w    d0,(a2)                ; inverted fonts get cleared
  641.     rts
  642.     
  643. lunderline:                        ; in this case we have a long mask
  644.     sub.w    d3,a2
  645.     tst.b    _zapinvert            ; is thefont inverted?
  646.     bne.s    lunderclear            ; 
  647.     eor.l    #$ffffffff,d0        ; invert the clear mask
  648.     or.l    d0,(a2)
  649.     rts
  650.     
  651. lunderclear:
  652.     and.l    d0,(a2)    
  653.     rts
  654.  
  655. ; the cpos macros do 12 points of a 12 pt foint
  656. ; >> 2
  657.     macro    cpos0
  658.     move.l    (a0),a1                ; select font *
  659.     add.l    d0,a1                ; add offset from start
  660.     
  661.     move.w    #$ffc0,d0            ; d0 = mask
  662.     clr.w    d1
  663.  
  664.     add.w    #%1,a2
  665.     
  666.     move.b    (a1),d1                ; d1 = char bit row
  667.     and.w    d0,(a2)
  668.     or.w    d1,(a2)
  669.     add.w    d3,a2
  670.     
  671.     move.b    2(a1),d1
  672.     and.w    d0,(a2)
  673.     or.w    d1,(a2)
  674.     add.w    d3,a2
  675.  
  676.     move.b    4(a1),d1
  677.     and.w    d0,(a2)
  678.     or.w    d1,(a2)
  679.     add.w    d3,a2
  680.  
  681.     move.b    6(a1),d1
  682.     and.w    d0,(a2)
  683.     or.w    d1,(a2)
  684.     add.w    d3,a2
  685.  
  686.     move.b    8(a1),d1
  687.     and.w    d0,(a2)
  688.     or.w    d1,(a2)
  689.     add.w    d3,a2
  690.  
  691.     move.b    10(a1),d1
  692.     and.w    d0,(a2)
  693.     or.w    d1,(a2)
  694.     add.w    d3,a2
  695.  
  696.     move.b    12(a1),d1
  697.     and.w    d0,(a2)
  698.     or.w    d1,(a2)
  699.     add.w    d3,a2
  700.  
  701.     move.b    14(a1),d1
  702.     and.w    d0,(a2)
  703.     or.w    d1,(a2)
  704.     add.w    d3,a2
  705.  
  706.     move.b    16(a1),d1
  707.     and.w    d0,(a2)
  708.     or.w    d1,(a2)
  709.     add.w    d3,a2
  710.  
  711.     move.b    18(a1),d1
  712.     and.w    d0,(a2)
  713.     or.w    d1,(a2)
  714.     add.w    d3,a2
  715.  
  716.     move.b    20(a1),d1
  717.     and.w    d0,(a2)
  718.     or.w    d1,(a2)
  719.     add.w    d3,a2
  720.  
  721.     move.b    22(a1),d1
  722.     and.w    d0,(a2)
  723.     or.w    d1,(a2)
  724.  
  725.     tst.b    _zapuline
  726.     bne        underline            ; last scan line may be an underline
  727.  
  728.     rts
  729.  
  730.     endm                ; cpos0
  731.  
  732. ; >> 0
  733.     macro    cpos1
  734.     move.l    4(a0),a1
  735.     add.l    d0,a1
  736.     move.w    #$3ff,d0
  737.  
  738.     add.w    #%1,a2
  739.     
  740.     move.w    (a1)+,d1
  741.     and.w    d0,(a2)
  742.     or.w    d1,(a2)
  743.     add.w    d3,a2
  744.  
  745.     move.w    (a1)+,d1
  746.     and.w    d0,(a2)
  747.     or.w    d1,(a2)
  748.     add.w    d3,a2
  749.  
  750.     move.w    (a1)+,d1
  751.     and.w    d0,(a2)
  752.     or.w    d1,(a2)
  753.     add.w    d3,a2
  754.  
  755.     move.w    (a1)+,d1
  756.     and.w    d0,(a2)
  757.     or.w    d1,(a2)
  758.     add.w    d3,a2
  759.  
  760.     move.w    (a1)+,d1
  761.     and.w    d0,(a2)
  762.     or.w    d1,(a2)
  763.     add.w    d3,a2
  764.  
  765.     move.w    (a1)+,d1
  766.     and.w    d0,(a2)
  767.     or.w    d1,(a2)
  768.     add.w    d3,a2
  769.  
  770.     move.w    (a1)+,d1
  771.     and.w    d0,(a2)
  772.     or.w    d1,(a2)
  773.     add.w    d3,a2
  774.  
  775.     move.w    (a1)+,d1
  776.     and.w    d0,(a2)
  777.     or.w    d1,(a2)
  778.     add.w    d3,a2
  779.  
  780.     move.w    (a1)+,d1
  781.     and.w    d0,(a2)
  782.     or.w    d1,(a2)
  783.     add.w    d3,a2
  784.  
  785.     move.w    (a1)+,d1
  786.     and.w    d0,(a2)
  787.     or.w    d1,(a2)
  788.     add.w    d3,a2
  789.  
  790.     move.w    (a1)+,d1
  791.     and.w    d0,(a2)
  792.     or.w    d1,(a2)
  793.     add.w    d3,a2
  794.  
  795.     move.w    (a1)+,d1
  796.     and.w    d0,(a2)
  797.     or.w    d1,(a2)
  798.  
  799.     tst.b    _zapuline
  800.     bne        underline
  801.  
  802.     rts
  803.     endm                ; cpos1
  804.  
  805. ; >> 6
  806.     macro     cpos2
  807.     move.l    (a0),a1
  808.     add.l    d0,a1
  809.     move.w    #$fc0f,d0
  810.  
  811.     add.w    #%1,a2
  812.  
  813.     move.w    (a1)+,d1
  814.     lsr.w    #4,d1
  815.     and.w    d0,(a2)
  816.     or.w    d1,(a2)
  817.     add.w    d3,a2
  818.  
  819.     move.w    (a1)+,d1
  820.     lsr.w    #4,d1
  821.     and.w    d0,(a2)
  822.     or.w    d1,(a2)
  823.     add.w    d3,a2
  824.  
  825.     move.w    (a1)+,d1
  826.     lsr.w    #4,d1
  827.     and.w    d0,(a2)
  828.     or.w    d1,(a2)
  829.     add.w    d3,a2
  830.  
  831.     move.w    (a1)+,d1
  832.     lsr.w    #4,d1
  833.     and.w    d0,(a2)
  834.     or.w    d1,(a2)
  835.     add.w    d3,a2
  836.  
  837.     move.w    (a1)+,d1
  838.     lsr.w    #4,d1
  839.     and.w    d0,(a2)
  840.     or.w    d1,(a2)
  841.     add.w    d3,a2
  842.  
  843.     move.w    (a1)+,d1
  844.     lsr.w    #4,d1
  845.     and.w    d0,(a2)
  846.     or.w    d1,(a2)
  847.     add.w    d3,a2
  848.  
  849.     move.w    (a1)+,d1
  850.     lsr.w    #4,d1
  851.     and.w    d0,(a2)
  852.     or.w    d1,(a2)
  853.     add.w    d3,a2
  854.  
  855.     move.w    (a1)+,d1
  856.     lsr.w    #4,d1
  857.     and.w    d0,(a2)
  858.     or.w    d1,(a2)
  859.     add.w    d3,a2
  860.  
  861.     move.w    (a1)+,d1
  862.     lsr.w    #4,d1
  863.     and.w    d0,(a2)
  864.     or.w    d1,(a2)
  865.     add.w    d3,a2
  866.  
  867.     move.w    (a1)+,d1
  868.     lsr.w    #4,d1
  869.     and.w    d0,(a2)
  870.     or.w    d1,(a2)
  871.     add.w    d3,a2
  872.  
  873.     move.w    (a1)+,d1
  874.     lsr.w    #4,d1
  875.     and.w    d0,(a2)
  876.     or.w    d1,(a2)
  877.     add.w    d3,a2
  878.  
  879.     move.w    (a1)+,d1
  880.     lsr.w    #4,d1
  881.     and.w    d0,(a2)
  882.     or.w    d1,(a2)
  883.  
  884.     tst.b    _zapuline
  885.     bne        underline
  886.  
  887.     rts
  888.     endm                ; cpos2
  889.  
  890. ; << 4
  891.     macro    cpos3
  892.     move.l    4(a0),a1
  893.     add.l    d0,a1
  894.     move.l    #$fff03fff,d0
  895.  
  896.     add.w    #%1,a2
  897.     
  898.     clr.l    d1
  899.     move.w    (a1)+,d1
  900.     lsl.l    #4,d1
  901.     and.l    d0,(a2)
  902.     or.l    d1,(a2)
  903.     add.w    d3,a2
  904.  
  905.     clr.l    d1
  906.     move.w    (a1)+,d1
  907.     lsl.l    #4,d1
  908.     and.l    d0,(a2)
  909.     or.l    d1,(a2)
  910.     add.w    d3,a2
  911.  
  912.     clr.l    d1
  913.     move.w    (a1)+,d1
  914.     lsl.l    #4,d1
  915.     and.l    d0,(a2)
  916.     or.l    d1,(a2)
  917.     add.w    d3,a2
  918.  
  919.     clr.l    d1
  920.     move.w    (a1)+,d1
  921.     lsl.l    #4,d1
  922.     and.l    d0,(a2)
  923.     or.l    d1,(a2)
  924.     add.w    d3,a2
  925.  
  926.     clr.l    d1
  927.     move.w    (a1)+,d1
  928.     lsl.l    #4,d1
  929.     and.l    d0,(a2)
  930.     or.l    d1,(a2)
  931.     add.w    d3,a2
  932.  
  933.     clr.l    d1
  934.     move.w    (a1)+,d1
  935.     lsl.l    #4,d1
  936.     and.l    d0,(a2)
  937.     or.l    d1,(a2)
  938.     add.w    d3,a2
  939.  
  940.     clr.l    d1
  941.     move.w    (a1)+,d1
  942.     lsl.l    #4,d1
  943.     and.l    d0,(a2)
  944.     or.l    d1,(a2)
  945.     add.w    d3,a2
  946.  
  947.     clr.l    d1
  948.     move.w    (a1)+,d1
  949.     lsl.l    #4,d1
  950.     and.l    d0,(a2)
  951.     or.l    d1,(a2)
  952.     add.w    d3,a2
  953.  
  954.     clr.l    d1
  955.     move.w    (a1)+,d1
  956.     lsl.l    #4,d1
  957.     and.l    d0,(a2)
  958.     or.l    d1,(a2)
  959.     add.w    d3,a2
  960.  
  961.     clr.l    d1
  962.     move.w    (a1)+,d1
  963.     lsl.l    #4,d1
  964.     and.l    d0,(a2)
  965.     or.l    d1,(a2)
  966.     add.w    d3,a2
  967.  
  968.     clr.l    d1
  969.     move.w    (a1)+,d1
  970.     lsl.l    #4,d1
  971.     and.l    d0,(a2)
  972.     or.l    d1,(a2)
  973.     add.w    d3,a2
  974.  
  975.     clr.l    d1
  976.     move.w    (a1)+,d1
  977.     lsl.l    #4,d1
  978.     and.l    d0,(a2)
  979.     or.l    d1,(a2)
  980.  
  981.     tst.b    _zapuline
  982.     bne        lunderline
  983.  
  984.     rts
  985.     endm                ; cpos3
  986.  
  987. ; >> 2
  988.     macro    cpos4
  989.     move.l    (a0),a1
  990.     add.l    d0,a1
  991.     move.w    #$c0ff,d0
  992.  
  993.     add.w    #%1,a2
  994.     
  995.     move.w    (a1)+,d1
  996.     and.w    d0,(a2)
  997.     or.w    d1,(a2)
  998.     add.w    d3,a2
  999.  
  1000.     move.w    (a1)+,d1
  1001.     and.w    d0,(a2)
  1002.     or.w    d1,(a2)
  1003.     add.w    d3,a2
  1004.  
  1005.     move.w    (a1)+,d1
  1006.     and.w    d0,(a2)
  1007.     or.w    d1,(a2)
  1008.     add.w    d3,a2
  1009.  
  1010.     move.w    (a1)+,d1
  1011.     and.w    d0,(a2)
  1012.     or.w    d1,(a2)
  1013.     add.w    d3,a2
  1014.  
  1015.     move.w    (a1)+,d1
  1016.     and.w    d0,(a2)
  1017.     or.w    d1,(a2)
  1018.     add.w    d3,a2
  1019.  
  1020.     move.w    (a1)+,d1
  1021.     and.w    d0,(a2)
  1022.     or.w    d1,(a2)
  1023.     add.w    d3,a2
  1024.  
  1025.     move.w    (a1)+,d1
  1026.     and.w    d0,(a2)
  1027.     or.w    d1,(a2)
  1028.     add.w    d3,a2
  1029.  
  1030.     move.w    (a1)+,d1
  1031.     and.w    d0,(a2)
  1032.     or.w    d1,(a2)
  1033.     add.w    d3,a2
  1034.  
  1035.     move.w    (a1)+,d1
  1036.     and.w    d0,(a2)
  1037.     or.w    d1,(a2)
  1038.     add.w    d3,a2
  1039.  
  1040.     move.w    (a1)+,d1
  1041.     and.w    d0,(a2)
  1042.     or.w    d1,(a2)
  1043.     add.w    d3,a2
  1044.  
  1045.     move.w    (a1)+,d1
  1046.     and.w    d0,(a2)
  1047.     or.w    d1,(a2)
  1048.     add.w    d3,a2
  1049.  
  1050.     move.w    (a1)+,d1
  1051.     and.w    d0,(a2)
  1052.     or.w    d1,(a2)
  1053.  
  1054.     tst.b    _zapuline
  1055.     bne        underline
  1056.  
  1057.     rts
  1058.     endm                ; cpos4
  1059.  
  1060. ; >> 0
  1061.     macro    cpos5
  1062.     move.l    4(a0),a1
  1063.     add.l    d0,a1
  1064.     move.w    #$ff03,d0
  1065.     clr.w    d1
  1066.  
  1067.     add.w    #%1,a2
  1068.     
  1069.     move.b    (a1),d1
  1070.     and.w    d0,(a2)
  1071.     or.w    d1,(a2)
  1072.     add.w    d3,a2
  1073.  
  1074.     move.b    2(a1),d1
  1075.     and.w    d0,(a2)
  1076.     or.w    d1,(a2)
  1077.     add.w    d3,a2
  1078.  
  1079.     move.b    4(a1),d1
  1080.     and.w    d0,(a2)
  1081.     or.w    d1,(a2)
  1082.     add.w    d3,a2
  1083.  
  1084.     move.b    6(a1),d1
  1085.     and.w    d0,(a2)
  1086.     or.w    d1,(a2)
  1087.     add.w    d3,a2
  1088.  
  1089.     move.b    8(a1),d1
  1090.     and.w    d0,(a2)
  1091.     or.w    d1,(a2)
  1092.     add.w    d3,a2
  1093.  
  1094.     move.b    10(a1),d1
  1095.     and.w    d0,(a2)
  1096.     or.w    d1,(a2)
  1097.     add.w    d3,a2
  1098.  
  1099.     move.b    12(a1),d1
  1100.     and.w    d0,(a2)
  1101.     or.w    d1,(a2)
  1102.     add.w    d3,a2
  1103.  
  1104.     move.b    14(a1),d1
  1105.     and.w    d0,(a2)
  1106.     or.w    d1,(a2)
  1107.     add.w    d3,a2
  1108.  
  1109.     move.b    16(a1),d1
  1110.     and.w    d0,(a2)
  1111.     or.w    d1,(a2)
  1112.     add.w    d3,a2
  1113.  
  1114.     move.b    18(a1),d1
  1115.     and.w    d0,(a2)
  1116.     or.w    d1,(a2)
  1117.     add.w    d3,a2
  1118.  
  1119.     move.b    20(a1),d1
  1120.     and.w    d0,(a2)
  1121.     or.w    d1,(a2)
  1122.     add.w    d3,a2
  1123.  
  1124.     move.b    22(a1),d1
  1125.     and.w    d0,(a2)
  1126.     or.w    d1,(a2)
  1127.  
  1128.     tst.b    _zapuline
  1129.     bne        underline
  1130.  
  1131.     rts
  1132.     endm                ; cpos5
  1133.  
  1134. ; << 2
  1135.     macro    cpos6
  1136.     move.l    4(a0),a1
  1137.     add.l    d0,a1
  1138.     move.l    #$fffc0fff,d0
  1139.  
  1140.     add.w    #%1,a2
  1141.     
  1142.     clr.l    d1
  1143.     move.w    (a1)+,d1
  1144.     lsl.l    #2,d1
  1145.     and.l    d0,(a2)
  1146.     or.l    d1,(a2)
  1147.     add.w    d3,a2
  1148.  
  1149.     clr.l    d1
  1150.     move.w    (a1)+,d1
  1151.     lsl.l    #2,d1
  1152.     and.l    d0,(a2)
  1153.     or.l    d1,(a2)
  1154.     add.w    d3,a2
  1155.  
  1156.     clr.l    d1
  1157.     move.w    (a1)+,d1
  1158.     lsl.l    #2,d1
  1159.     and.l    d0,(a2)
  1160.     or.l    d1,(a2)
  1161.     add.w    d3,a2
  1162.  
  1163.     clr.l    d1
  1164.     move.w    (a1)+,d1
  1165.     lsl.l    #2,d1
  1166.     and.l    d0,(a2)
  1167.     or.l    d1,(a2)
  1168.     add.w    d3,a2
  1169.  
  1170.     clr.l    d1
  1171.     move.w    (a1)+,d1
  1172.     lsl.l    #2,d1
  1173.     and.l    d0,(a2)
  1174.     or.l    d1,(a2)
  1175.     add.w    d3,a2
  1176.  
  1177.     clr.l    d1
  1178.     move.w    (a1)+,d1
  1179.     lsl.l    #2,d1
  1180.     and.l    d0,(a2)
  1181.     or.l    d1,(a2)
  1182.     add.w    d3,a2
  1183.  
  1184.     clr.l    d1
  1185.     move.w    (a1)+,d1
  1186.     lsl.l    #2,d1
  1187.     and.l    d0,(a2)
  1188.     or.l    d1,(a2)
  1189.     add.w    d3,a2
  1190.  
  1191.     clr.l    d1
  1192.     move.w    (a1)+,d1
  1193.     lsl.l    #2,d1
  1194.     and.l    d0,(a2)
  1195.     or.l    d1,(a2)
  1196.     add.w    d3,a2
  1197.  
  1198.     clr.l    d1
  1199.     move.w    (a1)+,d1
  1200.     lsl.l    #2,d1
  1201.     and.l    d0,(a2)
  1202.     or.l    d1,(a2)
  1203.     add.w    d3,a2
  1204.  
  1205.     clr.l    d1
  1206.     move.w    (a1)+,d1
  1207.     lsl.l    #2,d1
  1208.     and.l    d0,(a2)
  1209.     or.l    d1,(a2)
  1210.     add.w    d3,a2
  1211.  
  1212.     clr.l    d1
  1213.     move.w    (a1)+,d1
  1214.     lsl.l    #2,d1
  1215.     and.l    d0,(a2)
  1216.     or.l    d1,(a2)
  1217.     add.w    d3,a2
  1218.  
  1219.     clr.l    d1
  1220.     move.w    (a1)+,d1
  1221.     lsl.l    #2,d1
  1222.     and.l    d0,(a2)
  1223.     or.l    d1,(a2)
  1224.  
  1225.     tst.b    _zapuline
  1226.     bne        lunderline
  1227.  
  1228.     rts
  1229.     endm                ; cpos6
  1230.  
  1231. ; >> 4
  1232.     macro    cpos7
  1233.     move.l    (a0),a1
  1234.     add.l    d0,a1
  1235.     move.w    #$f03f,d0
  1236.  
  1237.     add.w    #%1,a2
  1238.     
  1239.     move.w    (a1)+,d1
  1240.     lsr.w   #2,d1
  1241.     and.w    d0,(a2)
  1242.     or.w    d1,(a2)
  1243.     add.w    d3,a2
  1244.  
  1245.     move.w    (a1)+,d1
  1246.     lsr.w   #2,d1
  1247.     and.w    d0,(a2)
  1248.     or.w    d1,(a2)
  1249.     add.w    d3,a2
  1250.  
  1251.     move.w    (a1)+,d1
  1252.     lsr.w   #2,d1
  1253.     and.w    d0,(a2)
  1254.     or.w    d1,(a2)
  1255.     add.w    d3,a2
  1256.  
  1257.     move.w    (a1)+,d1
  1258.     lsr.w   #2,d1
  1259.     and.w    d0,(a2)
  1260.     or.w    d1,(a2)
  1261.     add.w    d3,a2
  1262.  
  1263.     move.w    (a1)+,d1
  1264.     lsr.w   #2,d1
  1265.     and.w    d0,(a2)
  1266.     or.w    d1,(a2)
  1267.     add.w    d3,a2
  1268.  
  1269.     move.w    (a1)+,d1
  1270.     lsr.w   #2,d1
  1271.     and.w    d0,(a2)
  1272.     or.w    d1,(a2)
  1273.     add.w    d3,a2
  1274.  
  1275.     move.w    (a1)+,d1
  1276.     lsr.w   #2,d1
  1277.     and.w    d0,(a2)
  1278.     or.w    d1,(a2)
  1279.     add.w    d3,a2
  1280.  
  1281.     move.w    (a1)+,d1
  1282.     lsr.w   #2,d1
  1283.     and.w    d0,(a2)
  1284.     or.w    d1,(a2)
  1285.     add.w    d3,a2
  1286.  
  1287.     move.w    (a1)+,d1
  1288.     lsr.w   #2,d1
  1289.     and.w    d0,(a2)
  1290.     or.w    d1,(a2)
  1291.     add.w    d3,a2
  1292.  
  1293.     move.w    (a1)+,d1
  1294.     lsr.w   #2,d1
  1295.     and.w    d0,(a2)
  1296.     or.w    d1,(a2)
  1297.     add.w    d3,a2
  1298.  
  1299.     move.w    (a1)+,d1
  1300.     lsr.w   #2,d1
  1301.     and.w    d0,(a2)
  1302.     or.w    d1,(a2)
  1303.     add.w    d3,a2
  1304.  
  1305.     move.w    (a1)+,d1
  1306.     lsr.w   #2,d1
  1307.     and.w    d0,(a2)
  1308.     or.w    d1,(a2)
  1309.  
  1310.     tst.b    _zapuline
  1311.     bne        underline
  1312.  
  1313.     rts
  1314.     endm                ; cpos7
  1315.  
  1316.     nomlist
  1317.  
  1318. char0:
  1319.     cpos0    -2
  1320.  
  1321. char1:
  1322.     cpos1    0
  1323.  
  1324. char2:
  1325.     cpos2    0
  1326.  
  1327. char3:
  1328.     cpos3    0
  1329.  
  1330. char4:
  1331.     cpos4    2
  1332.  
  1333. char5:
  1334.     cpos5    2
  1335.  
  1336. char6:
  1337.     cpos6    2
  1338.  
  1339. char7:
  1340.     cpos7    4
  1341.  
  1342. char8:
  1343.     cpos0    4
  1344.  
  1345. char9:
  1346.     cpos1    6
  1347.  
  1348. char10:
  1349.     cpos2    6
  1350.  
  1351. char11:
  1352.     cpos3    6
  1353.  
  1354. char12:
  1355.     cpos4    8
  1356.  
  1357. char13:
  1358.     cpos5    8
  1359.  
  1360. char14:
  1361.     cpos6    8
  1362.  
  1363. char15:
  1364.     cpos7    10
  1365.  
  1366. char16:
  1367.     cpos0    10
  1368.  
  1369. char17:
  1370.     cpos1    12
  1371.  
  1372. char18:
  1373.     cpos2    12
  1374.  
  1375. char19:
  1376.     cpos3    12
  1377.  
  1378. char20:
  1379.     cpos4    14
  1380.  
  1381. char21:
  1382.     cpos5    14
  1383.  
  1384. char22:
  1385.     cpos6    14
  1386.  
  1387. char23:
  1388.     cpos7    16
  1389.  
  1390. char24:
  1391.     cpos0    16
  1392.  
  1393. char25:
  1394.     cpos1    18
  1395.  
  1396. char26:
  1397.     cpos2    18
  1398.  
  1399. char27:
  1400.     cpos3    18
  1401.  
  1402. char28:
  1403.     cpos4    20
  1404.  
  1405. char29:
  1406.     cpos5    20
  1407.  
  1408. char30:
  1409.     cpos6    20
  1410.  
  1411. char31:
  1412.     cpos7    22
  1413.  
  1414. char32:
  1415.     cpos0    22
  1416.  
  1417. char33:
  1418.     cpos1    24
  1419.  
  1420. char34:
  1421.     cpos2    24
  1422.  
  1423. char35:
  1424.     cpos3    24
  1425.  
  1426. char36:
  1427.     cpos4    26
  1428.  
  1429. char37:
  1430.     cpos5    26
  1431.  
  1432. char38:
  1433.     cpos6    26
  1434.  
  1435. char39:
  1436.     cpos7    28
  1437.  
  1438. char40:
  1439.     cpos0    28
  1440.  
  1441. char41:
  1442.     cpos1    30
  1443.  
  1444. char42:
  1445.     cpos2    30
  1446.  
  1447. char43:
  1448.     cpos3    30
  1449.  
  1450. char44:
  1451.     cpos4    32
  1452.  
  1453. char45:
  1454.     cpos5    32
  1455.  
  1456. char46:
  1457.     cpos6    32
  1458.  
  1459. char47:
  1460.     cpos7    34
  1461.  
  1462. char48:
  1463.     cpos0    34
  1464.  
  1465. char49:
  1466.     cpos1    36
  1467.  
  1468. char50:
  1469.     cpos2    36
  1470.  
  1471. char51:
  1472.     cpos3    36
  1473.  
  1474. char52:
  1475.     cpos4    38
  1476.  
  1477. char53:
  1478.     cpos5    38
  1479.  
  1480. char54:
  1481.     cpos6    38
  1482.  
  1483. char55:
  1484.     cpos7    40
  1485.  
  1486. char56:
  1487.     cpos0    40
  1488.  
  1489. char57:
  1490.     cpos1    42
  1491.  
  1492. char58:
  1493.     cpos2    42
  1494.  
  1495. char59:
  1496.     cpos3    42
  1497.  
  1498. char60:
  1499.     cpos4    44
  1500.  
  1501. char61:
  1502.     cpos5    44
  1503.  
  1504. char62:
  1505.     cpos6    44
  1506.  
  1507. char63:
  1508.     cpos7    46
  1509.  
  1510. char64:
  1511.     cpos0    46
  1512.  
  1513. char65:
  1514.     cpos1    48
  1515.  
  1516. char66:
  1517.     cpos2    48
  1518.  
  1519. char67:
  1520.     cpos3    48
  1521.  
  1522. char68:
  1523.     cpos4    50
  1524.  
  1525. char69:
  1526.     cpos5    50
  1527.  
  1528. char70:
  1529.     cpos6    50
  1530.  
  1531. char71:
  1532.     cpos7    52
  1533.  
  1534. char72:
  1535.     cpos0    52
  1536.  
  1537. char73:
  1538.     cpos1    54
  1539.  
  1540. char74:
  1541.     cpos2    54
  1542.  
  1543. char75:
  1544.     cpos3    54
  1545.  
  1546. char76:
  1547.     cpos4    56
  1548.  
  1549. char77:
  1550.     cpos5    56
  1551.  
  1552. char78:
  1553.     cpos6    56
  1554.  
  1555. char79:
  1556.     cpos7    58
  1557.  
  1558.  
  1559. ; case is the jump table for zapchar
  1560.  
  1561. case_:    
  1562.         dc.l    char0
  1563.         dc.l    char1
  1564.         dc.l    char2
  1565.         dc.l    char3
  1566.         dc.l    char4
  1567.         dc.l    char5
  1568.         dc.l    char6
  1569.         dc.l    char7
  1570.         dc.l    char8
  1571.         dc.l    char9
  1572.         dc.l    char10
  1573.         dc.l    char11
  1574.         dc.l    char12
  1575.         dc.l    char13
  1576.         dc.l    char14
  1577.         dc.l    char15
  1578.         dc.l    char16
  1579.         dc.l    char17
  1580.         dc.l    char18
  1581.         dc.l    char19
  1582.         dc.l    char20
  1583.         dc.l    char21
  1584.         dc.l    char22
  1585.         dc.l    char23
  1586.         dc.l    char24
  1587.         dc.l    char25
  1588.         dc.l    char26
  1589.         dc.l    char27
  1590.         dc.l    char28
  1591.         dc.l    char29
  1592.         dc.l    char30
  1593.         dc.l    char31
  1594.         dc.l    char32
  1595.         dc.l    char33
  1596.         dc.l    char34
  1597.         dc.l    char35
  1598.         dc.l    char36
  1599.         dc.l    char37
  1600.         dc.l    char38
  1601.         dc.l    char39
  1602.         dc.l    char40
  1603.         dc.l    char41
  1604.         dc.l    char42
  1605.         dc.l    char43
  1606.         dc.l    char44
  1607.         dc.l    char45
  1608.         dc.l    char46
  1609.         dc.l    char47
  1610.         dc.l    char48
  1611.         dc.l    char49
  1612.         dc.l    char50
  1613.         dc.l    char51
  1614.         dc.l    char52
  1615.         dc.l    char53
  1616.         dc.l    char54
  1617.         dc.l    char55
  1618.         dc.l    char56
  1619.         dc.l    char57
  1620.         dc.l    char58
  1621.         dc.l    char59
  1622.         dc.l    char60
  1623.         dc.l    char61
  1624.         dc.l    char62
  1625.         dc.l    char63
  1626.         dc.l    char64
  1627.         dc.l    char65
  1628.         dc.l    char66
  1629.         dc.l    char67
  1630.         dc.l    char68
  1631.         dc.l    char69
  1632.         dc.l    char70
  1633.         dc.l    char71
  1634.         dc.l    char72
  1635.         dc.l    char73
  1636.         dc.l    char74
  1637.         dc.l    char75
  1638.         dc.l    char76
  1639.         dc.l    char77
  1640.         dc.l    char78
  1641.         dc.l    char79
  1642.  
  1643. space0:
  1644.     spos0    -2,sp0
  1645. space1:
  1646.     spos1    0,sp1
  1647. space2:
  1648.     spos2    0,sp2
  1649. space3:
  1650.     spos3    0,sp3
  1651. space4:
  1652.     spos4    2,sp4
  1653. space5:
  1654.     spos5    2,sp5
  1655. space6:
  1656.     spos6    2,sp6
  1657. space7:
  1658.     spos7    4,sp7
  1659. space8:
  1660.     spos0    4,sp8
  1661. space9:
  1662.     spos1    6,sp9
  1663. space10:
  1664.     spos2    6,sp10
  1665. space11:
  1666.     spos3    6,sp11
  1667. space12:
  1668.     spos4    8,sp12
  1669. space13:
  1670.     spos5    8,sp13
  1671. space14:
  1672.     spos6    8,sp14
  1673. space15:
  1674.     spos7    10,sp15
  1675. space16:
  1676.     spos0    10,sp16
  1677. space17:
  1678.     spos1    12,sp17
  1679. space18:
  1680.     spos2    12,sp18
  1681. space19:
  1682.     spos3    12,sp19
  1683. space20:
  1684.     spos4    14,sp20
  1685. space21:
  1686.     spos5    14,sp21
  1687. space22:
  1688.     spos6    14,sp22
  1689. space23:
  1690.     spos7    16,sp23
  1691. space24:
  1692.     spos0    16,sp24
  1693. space25:
  1694.     spos1    18,sp25
  1695. space26:
  1696.     spos2    18,sp26
  1697. space27:
  1698.     spos3    18,sp27
  1699. space28:
  1700.     spos4    20,sp28
  1701. space29:
  1702.     spos5    20,sp29
  1703. space30:
  1704.     spos6    20,sp30
  1705. space31:
  1706.     spos7    22,sp31
  1707. space32:
  1708.     spos0    22,sp32
  1709. space33:
  1710.     spos1    24,sp33
  1711. space34:
  1712.     spos2    24,sp34
  1713. space35:
  1714.     spos3    24,sp35
  1715. space36:
  1716.     spos4    26,sp36
  1717. space37:
  1718.     spos5    26,sp37
  1719. space38:
  1720.     spos6    26,sp38
  1721. space39:
  1722.     spos7    28,sp39
  1723. space40:
  1724.     spos0    28,sp40
  1725. space41:
  1726.     spos1    30,sp41
  1727. space42:
  1728.     spos2    30,sp42
  1729. space43:
  1730.     spos3    30,sp43
  1731. space44:
  1732.     spos4    32,sp44
  1733. space45:
  1734.     spos5    32,sp45
  1735. space46:
  1736.     spos6    32,sp46
  1737. space47:
  1738.     spos7    34,sp47
  1739. space48:
  1740.     spos0    34,sp48
  1741. space49:
  1742.     spos1    36,sp49
  1743. space50:
  1744.     spos2    36,sp50
  1745. space51:
  1746.     spos3    36,sp51
  1747. space52:
  1748.     spos4    38,sp52
  1749. space53:
  1750.     spos5    38,sp53
  1751. space54:
  1752.     spos6    38,sp54
  1753. space55:
  1754.     spos7    40,sp55
  1755. space56:
  1756.     spos0    40,sp56
  1757. space57:
  1758.     spos1    42,sp57
  1759. space58:
  1760.     spos2    42,sp58
  1761. space59:
  1762.     spos3    42,sp59
  1763. space60:
  1764.     spos4    44,sp60
  1765. space61:
  1766.     spos5    44,sp61
  1767. space62:
  1768.     spos6    44,sp62
  1769. space63:
  1770.     spos7    46,sp63
  1771. space64:
  1772.     spos0    46,sp64
  1773. space65:
  1774.     spos1    48,sp65
  1775. space66:
  1776.     spos2    48,sp66
  1777. space67:
  1778.     spos3    48,sp67
  1779. space68:
  1780.     spos4    50,sp68
  1781. space69:
  1782.     spos5    50,sp69
  1783. space70:
  1784.     spos6    50,sp70
  1785. space71:
  1786.     spos7    52,sp71
  1787. space72:
  1788.     spos0    52,sp72
  1789. space73:
  1790.     spos1    54,sp73
  1791. space74:
  1792.     spos2    54,sp74
  1793. space75:
  1794.     spos3    54,sp75
  1795. space76:
  1796.     spos4    56,sp76
  1797. space77:
  1798.     spos5    56,sp77
  1799. space78:
  1800.     spos6    56,sp78
  1801. space79:
  1802.     spos7    58,sp79
  1803.  
  1804. case1_:    
  1805.         dc.l    space0
  1806.         dc.l    space1
  1807.         dc.l    space2
  1808.         dc.l    space3
  1809.         dc.l    space4
  1810.         dc.l    space5
  1811.         dc.l    space6
  1812.         dc.l    space7
  1813.         dc.l    space8
  1814.         dc.l    space9
  1815.         dc.l    space10
  1816.         dc.l    space11
  1817.         dc.l    space12
  1818.         dc.l    space13
  1819.         dc.l    space14
  1820.         dc.l    space15
  1821.         dc.l    space16
  1822.         dc.l    space17
  1823.         dc.l    space18
  1824.         dc.l    space19
  1825.         dc.l    space20
  1826.         dc.l    space21
  1827.         dc.l    space22
  1828.         dc.l    space23
  1829.         dc.l    space24
  1830.         dc.l    space25
  1831.         dc.l    space26
  1832.         dc.l    space27
  1833.         dc.l    space28
  1834.         dc.l    space29
  1835.         dc.l    space30
  1836.         dc.l    space31
  1837.         dc.l    space32
  1838.         dc.l    space33
  1839.         dc.l    space34
  1840.         dc.l    space35
  1841.         dc.l    space36
  1842.         dc.l    space37
  1843.         dc.l    space38
  1844.         dc.l    space39
  1845.         dc.l    space40
  1846.         dc.l    space41
  1847.         dc.l    space42
  1848.         dc.l    space43
  1849.         dc.l    space44
  1850.         dc.l    space45
  1851.         dc.l    space46
  1852.         dc.l    space47
  1853.         dc.l    space48
  1854.         dc.l    space49
  1855.         dc.l    space50
  1856.         dc.l    space51
  1857.         dc.l    space52
  1858.         dc.l    space53
  1859.         dc.l    space54
  1860.         dc.l    space55
  1861.         dc.l    space56
  1862.         dc.l    space57
  1863.         dc.l    space58
  1864.         dc.l    space59
  1865.         dc.l    space60
  1866.         dc.l    space61
  1867.         dc.l    space62
  1868.         dc.l    space63
  1869.         dc.l    space64
  1870.         dc.l    space65
  1871.         dc.l    space66
  1872.         dc.l    space67
  1873.         dc.l    space68
  1874.         dc.l    space69
  1875.         dc.l    space70
  1876.         dc.l    space71
  1877.         dc.l    space72
  1878.         dc.l    space73
  1879.         dc.l    space74
  1880.         dc.l    space75
  1881.         dc.l    space76
  1882.         dc.l    space77
  1883.         dc.l    space78
  1884.         dc.l    space79
  1885.  
  1886.  
  1887. _zapchar:
  1888.         move.w    _ypos,d0
  1889.         lsl.w    #2,d0
  1890.         move.l    _startarr,a2            ; a2 = *(startarr + ypos)
  1891.         move.l    (a2,d0.w),a2            ; a2 -> addr of 1'st scan line
  1892.  
  1893.         move.w    4(a7),d0                ; d0 = thechar
  1894.         move.w    _xpos,d1                ; d1 = xpos
  1895.         move.w    _fontwidth,d2
  1896.         move.w    _screenbytes,d3            ; # of bytes in screen row
  1897.         
  1898.         lea        _skiparr,a1                ; use optimized space drawing routine
  1899.         tst.b    (a1,d0.w)                ; if the character is a space
  1900.         bne.s    space
  1901.  
  1902.         move.l    _thefont,a0                ; 0(a0) -> table 1   4(a0) -> table 2
  1903.  
  1904.         cmp.w    #8,d2
  1905.         beq.s    zapbigfont
  1906.  
  1907. zapsmallfont:
  1908.         lsl.w    #2,d1                    ; xpos index into character jump table
  1909.         add.w    d0,d0                    ; d0 -> 2 * (the character)
  1910.         move.l    _chofftab9,a1            ; a1 -> character offset table
  1911.         move.w    (a1,d0.w),d0            ; d0 = byte offset from font start
  1912.  
  1913.         lea        case_,a1                ; branch to the correct character
  1914.         move.l    (a1,d1.w),a1            ; drawing routine
  1915.         jmp        (a1)                    ;
  1916.  
  1917. space:
  1918.         cmp.w    #8,d2
  1919.         beq.s    zapbigspos
  1920.  
  1921. smallspace:
  1922.         lsl.w    #2,d1                    ; xpos index into character jump table
  1923.         lea        case1_,a1                ; branch to the correct character
  1924.         move.l    (a1,d1.w),a1            ; drawing routine
  1925.         jmp        (a1)                    ;
  1926.  
  1927.  
  1928.  
  1929. ; bigcpos & bigspos handle 8-bit wide characters & spaces
  1930.  
  1931. ; a0 -> font
  1932. ; a1 -> font
  1933. ; a2 -> dest linestart
  1934. ; d0 = char
  1935. ; d1 = xpos
  1936. ; d3 = screen line width in bytes
  1937.  
  1938. zapbigfont:
  1939.     add.w    d1,a2                    ; a2 -> char pos on screen
  1940.     add.w    d0,d0                    ; d0 = 2 * (the character)
  1941.     move.l    _chofftab12,a1            ; a1 -> character offset table
  1942.     move.w    (a1,d0.w),d0            ; d0 = byte offset from font start
  1943.     
  1944.     ; and fall through...
  1945.  
  1946. ; a0 -> current font
  1947. ; a1 -> char in font
  1948. ; a2 -> dest 
  1949. ; d3 = screen line width in bytes
  1950.  
  1951. ; TODO roll up the loop for more flexibility?
  1952.  
  1953. bigcpos:
  1954.     move.l    8(a0),a1            ; a1 -> font3
  1955.     add.w    d0,a1                ; a1 -> char top in font
  1956.  
  1957.     move.b    (a1),(a2)
  1958.     add.w    #2,a1
  1959.     add.w    d3,a2
  1960.     move.b    (a1),(a2)
  1961.     add.w    #2,a1
  1962.     add.w    d3,a2
  1963.     move.b    (a1),(a2)
  1964.     add.w    #2,a1
  1965.     add.w    d3,a2
  1966.     move.b    (a1),(a2)
  1967.     add.w    #2,a1
  1968.     add.w    d3,a2
  1969.     move.b    (a1),(a2)
  1970.     add.w    #2,a1
  1971.     add.w    d3,a2
  1972.     move.b    (a1),(a2)
  1973.     add.w    #2,a1
  1974.     add.w    d3,a2
  1975.     move.b    (a1),(a2)
  1976.     add.w    #2,a1
  1977.     add.w    d3,a2
  1978.     move.b    (a1),(a2)
  1979.     add.w    #2,a1
  1980.     add.w    d3,a2
  1981.     move.b    (a1),(a2)
  1982.     add.w    #2,a1
  1983.     add.w    d3,a2
  1984.     move.b    (a1),(a2)
  1985.     add.w    #2,a1
  1986.     add.w    d3,a2
  1987.     move.b    (a1),(a2)
  1988.     add.w    #2,a1
  1989.     add.w    d3,a2
  1990.     move.b    (a1),(a2)
  1991.     add.w    #2,a1
  1992.     add.w    d3,a2
  1993.     move.b    (a1),(a2)
  1994.     add.w    #2,a1
  1995.     add.w    d3,a2
  1996.     move.b    (a1),(a2)                ; 14th line
  1997.     
  1998.     add.w    #2,a1
  1999.     add.w    d3,a2
  2000.     move.b    (a1),(a2)
  2001.     add.w    #2,a1
  2002.     add.w    d3,a2
  2003.     move.b    (a1),(a2)
  2004.     add.w    #2,a1
  2005.     add.w    d3,a2
  2006.     move.b    (a1),(a2)
  2007.     add.w    #2,a1
  2008.     add.w    d3,a2
  2009.     move.b    (a1),(a2)
  2010.     add.w    #2,a1
  2011.     add.w    d3,a2                    ; 19
  2012.     move.b    (a1),(a2)
  2013.  
  2014.     tst.b    _zapuline
  2015.     bne        bigunderline            ; last scan line may be an underline
  2016.  
  2017.     rts
  2018.     
  2019. zapbigspos:
  2020.     add.w    d1,a2                    ; a2 -> char pos on screen
  2021.  
  2022. bigspos:
  2023.     ; for 8 X 14 font, 8 X 19 substituted currently
  2024.     tst.b    _zapinvert
  2025.     bne.s    biginvert
  2026.     
  2027.     clr.b    (a2)
  2028.     add.w    d3,a2
  2029.     clr.b    (a2)
  2030.     add.w    d3,a2
  2031.     clr.b    (a2)
  2032.     add.w    d3,a2
  2033.     clr.b    (a2)
  2034.     add.w    d3,a2
  2035.     clr.b    (a2)
  2036.     add.w    d3,a2
  2037.     clr.b    (a2)
  2038.     add.w    d3,a2
  2039.     clr.b    (a2)
  2040.     add.w    d3,a2
  2041.     clr.b    (a2)
  2042.     add.w    d3,a2
  2043.     clr.b    (a2)
  2044.     add.w    d3,a2
  2045.     clr.b    (a2)
  2046.     add.w    d3,a2
  2047.     clr.b    (a2)
  2048.     add.w    d3,a2
  2049.     clr.b    (a2)
  2050.     add.w    d3,a2
  2051.     clr.b    (a2)
  2052.     add.w    d3,a2
  2053.     clr.b    (a2)                ; 14th line
  2054.  
  2055.     add.w    d3,a2
  2056.     clr.b    (a2)
  2057.     add.w    d3,a2
  2058.     clr.b    (a2)
  2059.     add.w    d3,a2
  2060.     clr.b    (a2)
  2061.     add.w    d3,a2
  2062.     clr.b    (a2)
  2063.     add.w    d3,a2
  2064.     clr.b    (a2)                ; 19th line
  2065.  
  2066.     tst.b    _zapuline
  2067.     bne.s    bigunderline
  2068.  
  2069.     rts
  2070.  
  2071. biginvert:
  2072.     move.b    #$ff,d0                ; invert the clear mask
  2073.     move.b    d0,(a2)
  2074.     add.w    d3,a2
  2075.     move.b    d0,(a2)
  2076.     add.w    d3,a2
  2077.     move.b    d0,(a2)
  2078.     add.w    d3,a2
  2079.     move.b    d0,(a2)
  2080.     add.w    d3,a2
  2081.     move.b    d0,(a2)
  2082.     add.w    d3,a2
  2083.     move.b    d0,(a2)
  2084.     add.w    d3,a2
  2085.     move.b    d0,(a2)
  2086.     add.w    d3,a2
  2087.     move.b    d0,(a2)
  2088.     add.w    d3,a2
  2089.     move.b    d0,(a2)
  2090.     add.w    d3,a2
  2091.     move.b    d0,(a2)
  2092.     add.w    d3,a2
  2093.     move.b    d0,(a2)
  2094.     add.w    d3,a2
  2095.     move.b    d0,(a2)
  2096.     add.w    d3,a2
  2097.     move.b    d0,(a2)
  2098.     add.w    d3,a2
  2099.     move.b    d0,(a2)        ; 14
  2100.  
  2101.     add.w    d3,a2
  2102.     move.b    d0,(a2)
  2103.     add.w    d3,a2
  2104.     move.b    d0,(a2)
  2105.     add.w    d3,a2
  2106.     move.b    d0,(a2)
  2107.     add.w    d3,a2
  2108.     move.b    d0,(a2)
  2109.     add.w    d3,a2
  2110.     move.b    d0,(a2)        ; 19
  2111.  
  2112.     tst.b    _zapuline
  2113.     bne.s    bigunderline
  2114.  
  2115.     rts
  2116.     
  2117. bigunderline:
  2118.     sub.w    d3,a2                ; back up a couple of scan lines
  2119.     sub.w    d3,a2
  2120.     sub.w    d3,a2
  2121.     tst.b    _zapinvert            ; is thefont inverted?
  2122.     bne.s    bigunderclear        ; 
  2123.     move.b    #$ff,(a2)            ; invert the clear mask
  2124.     rts
  2125.     
  2126. bigunderclear:
  2127.     clr.b    (a2)                ; inverted fonts get cleared
  2128.     rts
  2129.     
  2130.  
  2131. ; a0 -> multiplication table
  2132. ; a1 -> font rows
  2133. ; a2 -> linestart
  2134. ; a3 -> screen map
  2135. ; a4 -> font
  2136. ; a5 -> globals
  2137.  
  2138. ; d0 = the character
  2139. ; d1 = bit row, counter for chk_attr
  2140. ; d2 = modflg
  2141. ; d3-d7 used by clrit
  2142.  
  2143. ; needs inside character loop to be screen portable:
  2144. ; d3 = screen byte width
  2145. ; d4 saves a2
  2146.  
  2147. savregs:    reg        a3/a4/d4-d7
  2148.  
  2149. _zapbuf:
  2150.         link    a6,#0
  2151.         movem.l    savregs,-(sp)
  2152.  
  2153. ;        dc.w    $a9ff
  2154. ;        move.w    #1,d0
  2155. ;        dc.w    $a05d                        ; SwapMMUMode to 32-bit
  2156. ;        move.w    d0,-(sp)                    ; save current mode on stack
  2157.  
  2158.         move.l    8(a6),a3                    ; a3 -> 3270 screen map
  2159.         move.l    _thefont,a4                    ; 0(a4) -> table 1   4(a4) -> table 2
  2160.         cmp.l    #0,a4
  2161.         beq.s    nullfont
  2162.         lea        _skiparr,a1
  2163.         move.l    a1,_skiptest                ; if font != NULL, skiptest = skiparr
  2164.         bra.s    fontcont
  2165.  
  2166. nullfont:
  2167.         lea        _allskiparr,a1
  2168.         move.l    a1,_skiptest                ; else skiptest = allskiparr
  2169.  
  2170. fontcont:
  2171.         move.w    _screenbytes,d3                ; bytes in screen width
  2172.  
  2173.         move.l    _clrflg,d2                    ; d2 = line clear flag 
  2174.         move.l    _modflg,d1
  2175.         btst    #0,d1
  2176.         beq.s    skip0
  2177.  
  2178.         move.w    _fontwidth,d5
  2179.         cmp.w    #8,d5
  2180.         bne.s    smallfont
  2181.  
  2182. ; TODO this routine does not yet work, but could speed up 
  2183. ; the large font...
  2184.  
  2185. bufbigfont:    
  2186.         move.l    _thefont,a0                ; 0(a0) -> font table
  2187.         move.l    #$80000000,d6            ; d6 = line bit index to set/test flags
  2188.         move.w    #24,_long1                ; # of lines
  2189.         move.w    #$FFFC,_long3            ; _long3 = offset in startarr
  2190.                                         ; set up for pre increment
  2191.  
  2192. bigloop:
  2193.         sub.w    #1,_long1
  2194.         blt.s    bigexit
  2195.         
  2196.         add.w    #4,_long3                ; increment startarr offset
  2197.         rol.l    #1,d6                    ; shift the test bit up
  2198.         move.l    d6,d4                    ; d4 = current line bit
  2199.         and.l    _modflg,d4                ; test to see if modified
  2200.         bne.s    dobigdraw
  2201.  
  2202.         ; no need to draw, but must check for font change
  2203.         
  2204.         move.l    a0,a4                    ; a4 -> current font 
  2205.         jsr        chk_attr
  2206.         move.l    a4,a0                    ; a0 -> font (chk_attr may modify a4)
  2207.         bra.s    bigloop
  2208.         
  2209. dobigdraw:        
  2210.         move.l    d6,d4                    ; d4 = current line bit
  2211.         and.l    d2,d4                    ; d4 = cleared?
  2212.         clr.w    d5                        ; line touched by draw?
  2213.         move.w    #$ffff,d7                ; d7 = xpos, set up for preincrement
  2214.         move.w    #80,_long2                ; char count
  2215.  
  2216. biglinedraw:        
  2217.         sub.w    #1,_long2
  2218.         blt.s    biglinedrawexit
  2219.         
  2220.         add.w    #1,d7                    ; increment xpos for offset 
  2221.  
  2222.         clr.w    d0
  2223.         move.b    (a3)+,d0
  2224.         cmpi.w    #32,d0
  2225.         bge.s    abigchar
  2226.  
  2227. abigattr:    
  2228.         and.b    #$c,d0                    ; mask the attribute byte 
  2229.         lea        _fontarr,a1                ; a1 -> font * array
  2230.         lsl.w    #2,d0                    ; offset in array = d0 * 4
  2231.         move.l    (a1,d0.w),a0            ; a0 -> font from array
  2232.     
  2233.         lea        _fontskiparr,a1            ; a1 -> array of ptrs to skiparr or allskiparr
  2234.         move.l    (a1,d0.w),_skiptest        ; skiptest -> correct skiparr
  2235.     
  2236.         move.w    #32,d0                    ; fall through to put out a space
  2237.     
  2238. abigchar:
  2239.         tst.l    d4                        ; was line cleared?
  2240.         beq.s    drawbigchar                ; if not draw all chars
  2241.  
  2242.         move.l    _skiptest,a1
  2243.         tst.b    (a1,d0.l)                ; skip spaces if clear line
  2244.         bne.s    biglinedraw
  2245.  
  2246. drawbigchar:
  2247.         move.l    _startarr,a2            ; a2 -> line start array
  2248.         add.w    _long3,a2                ; a2 -> line start array entry
  2249.         move.l    (a2),a2                    ; a2 -> line start
  2250.         add.w    d7,a2                    ; a2 -> character top in line 
  2251.         
  2252.         st        d5                        ; d5 = character was drawn
  2253.         add.w    d0,d0                    ; d0 -> 2 * (scanlines/char) * (the character)
  2254.         move.l    _chofftab12,a1            ; a1 -> character offset table
  2255.         move.w    (a1,d0.w),d0            ; d0 = byte offset from font start
  2256.  
  2257.         jsr        bigcpos
  2258.         bra        biglinedraw
  2259.  
  2260. biglinedrawexit:
  2261.         tst.b    d5
  2262.         beq.s    nottouched
  2263.         neg.l    d4                        ; complement of d4
  2264.         and.l    d4,d2                    ; update the clear flag
  2265. nottouched:
  2266.         bra        bigloop
  2267.         
  2268. bigexit:
  2269.         move.l    d2,_clrflg                ; reset line clear flag 
  2270.         clr.l    _modflg                    ; all modified lines are out 
  2271.         
  2272. ;        move.w    (sp)+,d0
  2273. ;        dc.w    $a05d                    ; SwapMMUMode to restore previous mode
  2274.  
  2275.         movem.l    (sp)+,savregs
  2276.         unlk    a6
  2277.         rts
  2278.  
  2279. smallfont:
  2280.         ; zapbuf-draw a 9 pt font
  2281.  
  2282.         move.l    _startarr,a2
  2283.         move.l    (a2),a2                    ; a2 -> screen display line 0
  2284.     ;    add.w    d3,a2                    ; skip top two lines
  2285.     ;    add.w    d3,a2    
  2286.  
  2287.         bclr    #0,d2
  2288.         bne.s    skipc0
  2289.         jsr        _clrit
  2290. skipc0:
  2291.         jsr        zapline
  2292.         bra        do1
  2293.  
  2294. skip0:
  2295.         jsr        chk_attr
  2296.  
  2297. do1:
  2298.         move.l    _modflg,d1
  2299.         btst    #1,d1
  2300.         beq.s    skip1
  2301.         move.l    _startarr,a2
  2302.         move.l    4(a2),a2                ; a2 -> screen display line 1 
  2303.     ;    add.w    d3,a2
  2304.     ;    add.w    d3,a2
  2305.  
  2306.         bclr    #1,d2
  2307.         bne.s    skipc1
  2308.         jsr        _clrit
  2309. skipc1:
  2310.         jsr        zapline
  2311.         bra        do2
  2312.  
  2313. skip1:
  2314.         jsr        chk_attr
  2315.  
  2316. do2:
  2317.         move.l    _modflg,d1
  2318.         btst    #2,d1
  2319.         beq.s    skip2
  2320.         move.l    _startarr,a2
  2321.         move.l    8(a2),a2                ; a2 -> screen display line 1 
  2322.     ;    add.w    d3,a2
  2323.     ;    add.w    d3,a2
  2324.  
  2325.         bclr    #2,d2
  2326.         bne.s    skipc2
  2327.         jsr        _clrit
  2328. skipc2:
  2329.         jsr        zapline
  2330.         bra        do3
  2331.  
  2332. skip2:
  2333.         jsr        chk_attr
  2334.  
  2335. do3:
  2336.         move.l    _modflg,d1
  2337.         btst    #3,d1
  2338.         beq.s    skip3
  2339.         move.l    _startarr,a2
  2340.         move.l    12(a2),a2                ; a2 -> screen display line 1 
  2341.     ;    add.w    d3,a2
  2342.     ;    add.w    d3,a2
  2343.  
  2344.         bclr    #3,d2
  2345.         bne.s    skipc3
  2346.         jsr        _clrit
  2347. skipc3:
  2348.         jsr        zapline
  2349.         bra        do4
  2350. skip3:
  2351.         jsr        chk_attr
  2352.  
  2353. do4:
  2354.         move.l    _modflg,d1
  2355.         btst    #4,d1
  2356.         beq.s    skip4
  2357.         move.l    _startarr,a2
  2358.         move.l    16(a2),a2                ; a2 -> screen display line 1 
  2359.     ;    add.w    d3,a2
  2360.     ;    add.w    d3,a2
  2361.  
  2362.         bclr    #4,d2
  2363.         bne.s    skipc4
  2364.         jsr        _clrit
  2365. skipc4:
  2366.         jsr        zapline
  2367.         bra        do5
  2368.  
  2369. skip4:
  2370.         jsr        chk_attr
  2371.  
  2372. do5:
  2373.         move.l    _modflg,d1
  2374.         btst    #5,d1
  2375.         beq.s    skip5
  2376.         move.l    _startarr,a2
  2377.         move.l    20(a2),a2                ; a2 -> screen display line 1 
  2378.     ;    add.w    d3,a2
  2379.     ;    add.w    d3,a2
  2380.  
  2381.         bclr    #5,d2
  2382.         bne.s    skipc5
  2383.         jsr        _clrit
  2384. skipc5:
  2385.         jsr        zapline
  2386.         bra        do6
  2387.  
  2388. skip5:
  2389.         jsr        chk_attr
  2390.  
  2391. do6:
  2392.         move.l    _modflg,d1
  2393.         btst    #6,d1
  2394.         beq.s    skip6
  2395.         move.l    _startarr,a2
  2396.         move.l    24(a2),a2                ; a2 -> screen display line 1 
  2397.     ;    add.w    d3,a2
  2398.     ;    add.w    d3,a2
  2399.  
  2400.         bclr    #6,d2
  2401.         bne.s    skipc6
  2402.         jsr        _clrit
  2403. skipc6:
  2404.         jsr        zapline
  2405.         bra        do7
  2406.  
  2407. skip6:
  2408.         jsr        chk_attr
  2409.  
  2410. do7:
  2411.         move.l    _modflg,d1
  2412.         btst    #7,d1
  2413.         beq.s    skip7
  2414.         move.l    _startarr,a2
  2415.         move.l    28(a2),a2                ; a2 -> screen display line 1 
  2416.     ;    add.w    d3,a2
  2417.     ;    add.w    d3,a2
  2418.  
  2419.         bclr    #7,d2
  2420.         bne.s    skipc7
  2421.         jsr        _clrit
  2422. skipc7:
  2423.         jsr        zapline
  2424.         bra        do8
  2425.  
  2426. skip7:
  2427.         jsr        chk_attr
  2428.  
  2429. do8:
  2430.         move.l    _modflg,d1
  2431.         btst    #8,d1
  2432.         beq.s    skip8
  2433.         move.l    _startarr,a2
  2434.         move.l    32(a2),a2                ; a2 -> screen display line 1 
  2435.     ;    add.w    d3,a2
  2436.     ;    add.w    d3,a2
  2437.  
  2438.         bclr    #8,d2
  2439.         bne.s    skipc8
  2440.         jsr        _clrit
  2441. skipc8:
  2442.         jsr        zapline
  2443.         bra        do9
  2444.  
  2445. skip8:
  2446.         jsr        chk_attr
  2447.  
  2448. do9:
  2449.         move.l    _modflg,d1
  2450.         btst    #9,d1
  2451.         beq.s    skip9
  2452.         move.l    _startarr,a2
  2453.         move.l    36(a2),a2                ; a2 -> screen display line 1 
  2454.     ;    add.w    d3,a2
  2455.     ;    add.w    d3,a2
  2456.  
  2457.         bclr    #9,d2
  2458.         bne.s    skipc9
  2459.         jsr        _clrit
  2460. skipc9:
  2461.         jsr        zapline
  2462.         bra        do10
  2463.  
  2464. skip9:
  2465.         jsr        chk_attr
  2466.  
  2467. do10:
  2468.         move.l    _modflg,d1
  2469.         btst    #10,d1
  2470.         beq.s    skip10
  2471.         move.l    _startarr,a2
  2472.         move.l    40(a2),a2                ; a2 -> screen display line 1 
  2473.     ;    add.w    d3,a2
  2474.     ;    add.w    d3,a2
  2475.  
  2476.         bclr    #10,d2
  2477.         bne.s    skipc10
  2478.         jsr        _clrit
  2479. skipc10:
  2480.         jsr        zapline
  2481.         bra        do11
  2482.  
  2483. skip10:
  2484.         jsr        chk_attr
  2485.  
  2486. do11:
  2487.         move.l    _modflg,d1
  2488.         btst    #11,d1
  2489.         beq.s    skip11
  2490.         move.l    _startarr,a2
  2491.         move.l    44(a2),a2                ; a2 -> screen display line 1 
  2492.     ;    add.w    d3,a2
  2493.     ;    add.w    d3,a2
  2494.  
  2495.         bclr    #11,d2
  2496.         bne.s    skipc11
  2497.         jsr        _clrit
  2498. skipc11:
  2499.         jsr        zapline
  2500.         bra        do12
  2501.  
  2502. skip11:
  2503.         jsr        chk_attr
  2504.  
  2505. do12:
  2506.         move.l    _modflg,d1
  2507.         btst    #12,d1
  2508.         beq.s    skip12
  2509.         move.l    _startarr,a2
  2510.         move.l    48(a2),a2                ; a2 -> screen display line 1 
  2511.     ;    add.w    d3,a2
  2512.     ;    add.w    d3,a2
  2513.  
  2514.         bclr    #12,d2
  2515.         bne.s    skipc12
  2516.         jsr        _clrit
  2517. skipc12:
  2518.         jsr        zapline
  2519.         bra        do13
  2520.  
  2521. skip12:
  2522.         jsr        chk_attr
  2523.  
  2524. do13:
  2525.         move.l    _modflg,d1
  2526.         btst    #13,d1
  2527.         beq.s    skip13
  2528.         move.l    _startarr,a2
  2529.         move.l    52(a2),a2                ; a2 -> screen display line 1 
  2530.     ;    add.w    d3,a2
  2531.     ;    add.w    d3,a2
  2532.  
  2533.         bclr    #13,d2
  2534.         bne.s    skipc13
  2535.         jsr        _clrit
  2536. skipc13:
  2537.         jsr        zapline
  2538.         bra        do14
  2539.  
  2540. skip13:
  2541.         jsr        chk_attr
  2542.  
  2543. do14:
  2544.         move.l    _modflg,d1
  2545.         btst    #14,d1
  2546.         beq.s    skip14
  2547.         move.l    _startarr,a2
  2548.         move.l    56(a2),a2                ; a2 -> screen display line 1 
  2549.     ;    add.w    d3,a2
  2550.     ;    add.w    d3,a2
  2551.         
  2552.         bclr    #14,d2
  2553.         bne.s    skipc14
  2554.         jsr        _clrit
  2555. skipc14:
  2556.         jsr        zapline
  2557.         bra        do15
  2558.  
  2559. skip14:
  2560.         jsr        chk_attr
  2561.  
  2562. do15:
  2563.         move.l    _modflg,d1
  2564.         btst    #15,d1
  2565.         beq.s    skip15
  2566.         move.l    _startarr,a2
  2567.         move.l    60(a2),a2                ; a2 -> screen display line 1 
  2568.     ;    add.w    d3,a2
  2569.     ;    add.w    d3,a2
  2570.  
  2571.         bclr    #15,d2
  2572.         bne.s    skipc15
  2573.         jsr        _clrit
  2574. skipc15:
  2575.         jsr        zapline
  2576.         bra        do16
  2577.  
  2578. skip15:
  2579.         jsr        chk_attr
  2580.  
  2581. do16:
  2582.         move.l    _modflg,d1
  2583.         btst    #16,d1
  2584.         beq.s    skip16
  2585.         move.l    _startarr,a2
  2586.         move.l    64(a2),a2                ; a2 -> screen display line 1 
  2587.     ;    add.w    d3,a2
  2588.     ;    add.w    d3,a2
  2589.  
  2590.         bclr    #16,d2
  2591.         bne.s    skipc16
  2592.         jsr        _clrit
  2593. skipc16:
  2594.         jsr        zapline
  2595.         bra        do17
  2596.  
  2597. skip16:
  2598.         jsr        chk_attr
  2599.  
  2600. do17:
  2601.         move.l    _modflg,d1
  2602.         btst    #17,d1
  2603.         beq.s    skip17
  2604.         move.l    _startarr,a2
  2605.         move.l    68(a2),a2                ; a2 -> screen display line 1 
  2606.     ;    add.w    d3,a2
  2607.     ;    add.w    d3,a2
  2608.  
  2609.         bclr    #17,d2
  2610.         bne.s    skipc17
  2611.         jsr        _clrit
  2612. skipc17:
  2613.         jsr        zapline
  2614.         bra        do18
  2615.  
  2616. skip17:
  2617.         jsr        chk_attr
  2618.  
  2619. do18:
  2620.         move.l    _modflg,d1
  2621.         btst    #18,d1
  2622.         beq.s    skip18
  2623.         move.l    _startarr,a2
  2624.         move.l    72(a2),a2                ; a2 -> screen display line 1 
  2625.     ;    add.w    d3,a2
  2626.     ;    add.w    d3,a2
  2627.  
  2628.         bclr    #18,d2
  2629.         bne.s    skipc18
  2630.         jsr        _clrit
  2631. skipc18:
  2632.         jsr        zapline
  2633.         bra        do19
  2634.  
  2635. skip18:
  2636.         jsr        chk_attr
  2637.  
  2638. do19:
  2639.         move.l    _modflg,d1
  2640.         btst    #19,d1
  2641.         beq.s    skip19
  2642.         move.l    _startarr,a2
  2643.         move.l    76(a2),a2                ; a2 -> screen display line 1 
  2644.     ;    add.w    d3,a2
  2645.     ;    add.w    d3,a2
  2646.  
  2647.         bclr    #19,d2
  2648.         bne.s    skipc19
  2649.         jsr        _clrit
  2650. skipc19:
  2651.         jsr        zapline
  2652.         bra        do20
  2653.  
  2654. skip19:
  2655.         jsr        chk_attr
  2656.  
  2657. do20:
  2658.         move.l    _modflg,d1
  2659.         btst    #20,d1
  2660.         beq.s    skip20
  2661.         move.l    _startarr,a2
  2662.         move.l    80(a2),a2                ; a2 -> screen display line 1 
  2663.     ;    add.w    d3,a2
  2664.     ;    add.w    d3,a2
  2665.  
  2666.         bclr    #20,d2
  2667.         bne.s    skipc20
  2668.         jsr        _clrit
  2669. skipc20:
  2670.         jsr        zapline
  2671.         bra        do21
  2672.  
  2673. skip20:
  2674.         jsr        chk_attr
  2675.  
  2676. do21:
  2677.         move.l    _modflg,d1
  2678.         btst    #21,d1
  2679.         beq.s    skip21
  2680.         move.l    _startarr,a2
  2681.         move.l    84(a2),a2                ; a2 -> screen display line 1 
  2682.     ;    add.w    d3,a2
  2683.     ;    add.w    d3,a2
  2684.  
  2685.         bclr    #21,d2
  2686.         bne.s    skipc21
  2687.         jsr        _clrit
  2688. skipc21:
  2689.         jsr        zapline
  2690.         bra        do22
  2691.  
  2692. skip21:
  2693.         jsr        chk_attr
  2694.  
  2695. do22:
  2696.         move.l    _modflg,d1
  2697.         btst    #22,d1
  2698.         beq.s    skip22
  2699.         move.l    _startarr,a2
  2700.         move.l    88(a2),a2                ; a2 -> screen display line 1 
  2701.     ;    add.w    d3,a2
  2702.     ;    add.w    d3,a2
  2703.  
  2704.         bclr    #22,d2
  2705.         bne.s    skipc22
  2706.         jsr        _clrit
  2707. skipc22:
  2708.         jsr        zapline
  2709.         bra        do23
  2710.  
  2711. skip22:
  2712.         jsr        chk_attr
  2713.  
  2714. do23:
  2715.         move.l    _modflg,d1
  2716.         btst    #23,d1
  2717.         beq.s    skip23
  2718.         move.l    _startarr,a2
  2719.         move.l    92(a2),a2                ; a2 -> screen display line 1 
  2720.     ;    add.w    d3,a2
  2721.     ;    add.w    d3,a2
  2722.  
  2723.         bclr    #23,d2
  2724.         bne.s    skipc23
  2725.         jsr        _clrit
  2726. skipc23:
  2727.         jsr        zapline
  2728.  
  2729. skip23:
  2730.         move.l    d2,_clrflg                    ; reset line clear flag 
  2731.         clr.l    _modflg                        ; all modified lines are out 
  2732.  
  2733. ;        move.w    (sp)+,d0
  2734. ;        dc.w    $a05d                    ; SwapMMUMode to restore previous mode
  2735.  
  2736.         movem.l    (sp)+,savregs
  2737.         unlk    a6
  2738.         rts
  2739.  
  2740.  
  2741. chk_attr:
  2742.         move.w    #79,d7
  2743.         clr.w    d0
  2744.         
  2745. tst_attr:
  2746.         move.b    (a3)+,d0                ; a3 -> chars in scr_map
  2747.         cmpi.w    #32,d0
  2748.         dblt    d7,tst_attr                ; if char < 32, continue
  2749.  
  2750.         tst.w    d7
  2751.         bge.s    isattr                    ; if d7 < 0 we hit the end of the line
  2752.         rts
  2753. isattr
  2754.         and.b    #$c,d0                    ; mask the attribute byte 
  2755.         lea        _fontarr,a1                ; a1 -> font * array
  2756.         lsl.w    #2,d0                    ; offset in array = d0 * 4
  2757.         move.l    (a1,d0.w),a4            ; a4 -> font from array
  2758.  
  2759.         lea        _fontskiparr,a1            ; a1 -> array of ptrs to skiparr or allskiparr
  2760.         move.l    (a1,d0.w),_skiptest        ; skiptest -> correct skiparr
  2761.         
  2762.         dbra    d7,tst_attr                ; continue
  2763.         rts
  2764.         
  2765.  
  2766.     ; zapline related routines follow
  2767.     ; the lpos# macros do the 8 variations on drawing a 6-bit wide char within a line
  2768.     ; macro arg = bit offset from a2
  2769.     ; a2 -> starting pos of line on screen
  2770.     ; a3 -> character array
  2771.     ; a4 -> font
  2772.  
  2773.     ; uses d0 = offset of char in font
  2774.  
  2775.     ; $0C is the mask for display detectable 
  2776.     ; $00 = normal/not pen detectable
  2777.     ; $04 = normal/detectable
  2778.     ; $08 = bold/detectable
  2779.     ; $0C = invisible/not detectable
  2780.     
  2781.     ; first check to see if this char is an attribute
  2782.     ; if so reset the font ptr & skip drawing
  2783.     ; else draw character
  2784.     
  2785.     macro    lpos0
  2786.  
  2787.     clr.l    d0
  2788.     move.b    (a3)+,d0
  2789.     cmpi.w    #32,d0
  2790.     bge.s    %2    
  2791.  
  2792.     and.b    #$c,d0                    ; mask the attribute byte 
  2793.     lea        _fontarr,a1                ; a1 -> font * array
  2794.     lsl.w    #2,d0                    ; offset in array = d0 * 4
  2795.     move.l    (a1,d0.w),a4            ; a4 -> font from array
  2796.  
  2797.     lea        _fontskiparr,a1            ; a1 -> array of ptrs to skiparr or allskiparr
  2798.     move.l    (a1,d0.w),_skiptest        ; skiptest -> correct skiparr
  2799.  
  2800.     bra        %3
  2801.  
  2802. %2:
  2803.     move.l    _skiptest,a1
  2804.     tst.b    (a1,d0.l)                ; skip spaces
  2805.     bne.s    %3
  2806.     
  2807.     lsl.l    #1,d0
  2808.     move.l    _chofftab9,a1
  2809.     move.w    (a1,d0.l),d0
  2810. ;    add.w    #4,d0                ; kevin skip first two lines of font
  2811.     
  2812.     move.l    a2,d4
  2813.     add.w    #%1,a2
  2814.     
  2815.     move.l    (a4),a1
  2816.     add.l    d0,a1
  2817.     clr.w    d1
  2818.  
  2819.     move.b    (a1),d1
  2820.     or.w    d1,(a2)
  2821.     add.w    d3,a2                ; end first group
  2822.     move.b    2(a1),d1
  2823.     or.w    d1,(a2)
  2824.     add.w    d3,a2
  2825.     move.b    4(a1),d1
  2826.     or.w    d1,(a2)
  2827.     add.w    d3,a2
  2828.     move.b    6(a1),d1
  2829.     or.w    d1,(a2)
  2830.     add.w    d3,a2
  2831.     move.b    8(a1),d1
  2832.     or.w    d1,(a2)
  2833.     add.w    d3,a2
  2834.     move.b    10(a1),d1
  2835.     or.w    d1,(a2)
  2836.     add.w    d3,a2
  2837.     move.b    12(a1),d1
  2838.     or.w    d1,(a2)
  2839.     add.w    d3,a2
  2840.     move.b    14(a1),d1
  2841.     or.w    d1,(a2)
  2842.     add.w    d3,a2
  2843.     move.b    16(a1),d1
  2844.     or.w    d1,(a2)
  2845.     add.w    d3,a2                ; add. 2 lines
  2846.     move.b    18(a1),d1
  2847.     or.w    d1,(a2)
  2848.     add.w    d3,a2
  2849.     move.b    20(a1),d1
  2850.     or.w    d1,(a2)
  2851.  
  2852.     move.l    d4,a2
  2853. %3:
  2854.     endm    
  2855.  
  2856.  
  2857.     macro    lpos1
  2858.  
  2859.     clr.l    d0
  2860.     move.b    (a3)+,d0
  2861.     cmpi.w    #32,d0
  2862.     bge.s    %2
  2863.  
  2864.     and.b    #$c,d0
  2865.     lea        _fontarr,a1
  2866.     lsl.w    #2,d0
  2867.     move.l    (a1,d0.w),a4
  2868.  
  2869.     lea        _fontskiparr,a1
  2870.     move.l    (a1,d0.w),_skiptest
  2871.     
  2872.     bra        %3
  2873.  
  2874. %2:
  2875.     move.l    _skiptest,a1
  2876.     tst.b    (a1,d0.l)                ; skip spaces
  2877.     bne.s    %3    
  2878.  
  2879.     lsl.l    #1,d0
  2880.     move.l    _chofftab9,a1
  2881.     move.w    (a1,d0.l),d0
  2882. ;    add.w    #4,d0
  2883.  
  2884.     move.l    a2,d4
  2885.     add.w    #%1,a2
  2886.     
  2887.     move.l    4(a4),a1
  2888.     add.l    d0,a1
  2889.  
  2890.     move.w    (a1)+,d1
  2891.     or.w    d1,(a2)
  2892.     add.w    d3,a2
  2893.  
  2894.     move.w    (a1)+,d1
  2895.     or.w    d1,(a2)
  2896.     add.w    d3,a2
  2897.  
  2898.     move.w    (a1)+,d1
  2899.     or.w    d1,(a2)
  2900.     add.w    d3,a2
  2901.  
  2902.     move.w    (a1)+,d1
  2903.     or.w    d1,(a2)
  2904.     add.w    d3,a2
  2905.  
  2906.     move.w    (a1)+,d1
  2907.     or.w    d1,(a2)
  2908.     add.w    d3,a2
  2909.  
  2910.     move.w    (a1)+,d1
  2911.     or.w    d1,(a2)
  2912.     add.w    d3,a2
  2913.  
  2914.     move.w    (a1)+,d1
  2915.     or.w    d1,(a2)
  2916.     add.w    d3,a2
  2917.  
  2918.     move.w    (a1)+,d1
  2919.     or.w    d1,(a2)
  2920.     add.w    d3,a2
  2921.  
  2922.     move.w    (a1)+,d1
  2923.     or.w    d1,(a2)
  2924.     add.w    d3,a2                ; add. 2 lines
  2925.  
  2926.     move.w    (a1)+,d1
  2927.     or.w    d1,(a2)
  2928.     add.w    d3,a2
  2929.  
  2930.     move.w    (a1)+,d1
  2931.     or.w    d1,(a2)
  2932.  
  2933.     move.l    d4,a2
  2934. %3:
  2935.     endm
  2936.  
  2937.  
  2938.     macro     lpos2
  2939.  
  2940.     clr.l    d0
  2941.     move.b    (a3)+,d0
  2942.     cmpi.w    #32,d0
  2943.     bge.s    %2
  2944.  
  2945.     and.b    #$c,d0
  2946.     lea        _fontarr,a1
  2947.     lsl.w    #2,d0
  2948.     move.l    (a1,d0.w),a4
  2949.     
  2950.     lea        _fontskiparr,a1
  2951.     move.l    (a1,d0.w),_skiptest
  2952.  
  2953.     bra        %3
  2954.  
  2955. %2:
  2956.     move.l    _skiptest,a1
  2957.     tst.b    (a1,d0.l)
  2958.     bne.s    %3
  2959.  
  2960.     lsl.l    #1,d0
  2961.     move.l    _chofftab9,a1
  2962.     move.w    (a1,d0.l),d0
  2963. ;    add.w    #4,d0
  2964.  
  2965.     move.l    a2,d4
  2966.     add.w    #%1,a2
  2967.  
  2968.     move.l    (a4),a1
  2969.     add.l    d0,a1
  2970.  
  2971.     move.w    (a1)+,d1
  2972.     lsr.w    #4,d1
  2973.     or.w    d1,(a2)
  2974.     add.w    d3,a2
  2975.  
  2976.     move.w    (a1)+,d1
  2977.     lsr.w    #4,d1
  2978.     or.w    d1,(a2)
  2979.     add.w    d3,a2
  2980.  
  2981.     move.w    (a1)+,d1
  2982.     lsr.w    #4,d1
  2983.     or.w    d1,(a2)
  2984.     add.w    d3,a2
  2985.  
  2986.     move.w    (a1)+,d1
  2987.     lsr.w    #4,d1
  2988.     or.w    d1,(a2)
  2989.     add.w    d3,a2
  2990.  
  2991.     move.w    (a1)+,d1
  2992.     lsr.w    #4,d1
  2993.     or.w    d1,(a2)
  2994.     add.w    d3,a2
  2995.  
  2996.     move.w    (a1)+,d1
  2997.     lsr.w    #4,d1
  2998.     or.w    d1,(a2)
  2999.     add.w    d3,a2
  3000.  
  3001.     move.w    (a1)+,d1
  3002.     lsr.w    #4,d1
  3003.     or.w    d1,(a2)
  3004.     add.w    d3,a2
  3005.  
  3006.     move.w    (a1)+,d1
  3007.     lsr.w    #4,d1
  3008.     or.w    d1,(a2)
  3009.     add.w    d3,a2
  3010.  
  3011.     move.w    (a1)+,d1
  3012.     lsr.w    #4,d1
  3013.     or.w    d1,(a2)
  3014.     add.w    d3,a2                ; add. 2 lines
  3015.  
  3016.     move.w    (a1)+,d1
  3017.     lsr.w    #4,d1
  3018.     or.w    d1,(a2)
  3019.     add.w    d3,a2
  3020.  
  3021.     move.w    (a1)+,d1
  3022.     lsr.w    #4,d1
  3023.     or.w    d1,(a2)
  3024.  
  3025.     move.l    d4,a2
  3026. %3:
  3027.     endm
  3028.  
  3029.     macro    lpos3
  3030.  
  3031.     clr.l    d0
  3032.     move.b    (a3)+,d0
  3033.     cmpi.w    #32,d0
  3034.     bge.s    %2
  3035.  
  3036.     and.b    #$c,d0
  3037.     lea        _fontarr,a1
  3038.     lsl.w    #2,d0
  3039.     move.l    (a1,d0.w),a4
  3040.  
  3041.     lea        _fontskiparr,a1
  3042.     move.l    (a1,d0.w),_skiptest
  3043.     
  3044.     bra        %3
  3045.  
  3046. %2:
  3047.     move.l    _skiptest,a1
  3048.     tst.b    (a1,d0.l)
  3049.     bne.s    %3
  3050.  
  3051.     lsl.l    #1,d0
  3052.     move.l    _chofftab9,a1
  3053.     move.w    (a1,d0.l),d0
  3054. ;    add.w    #4,d0
  3055.  
  3056.     move.l    a2,d4
  3057.     add.w    #%1,a2
  3058.     
  3059.     move.l    4(a4),a1
  3060.     add.l    d0,a1
  3061.  
  3062.     clr.l    d1
  3063.     move.w    (a1)+,d1
  3064.     lsl.l    #4,d1
  3065.     or.l    d1,(a2)
  3066.     add.w    d3,a2
  3067.  
  3068.     clr.l    d1
  3069.     move.w    (a1)+,d1
  3070.     lsl.l    #4,d1
  3071.     or.l    d1,(a2)
  3072.     add.w    d3,a2
  3073.  
  3074.     clr.l    d1
  3075.     move.w    (a1)+,d1
  3076.     lsl.l    #4,d1
  3077.     or.l    d1,(a2)
  3078.     add.w    d3,a2
  3079.  
  3080.     clr.l    d1
  3081.     move.w    (a1)+,d1
  3082.     lsl.l    #4,d1
  3083.     or.l    d1,(a2)
  3084.     add.w    d3,a2
  3085.  
  3086.     clr.l    d1
  3087.     move.w    (a1)+,d1
  3088.     lsl.l    #4,d1
  3089.     or.l    d1,(a2)
  3090.     add.w    d3,a2
  3091.  
  3092.     clr.l    d1
  3093.     move.w    (a1)+,d1
  3094.     lsl.l    #4,d1
  3095.     or.l    d1,(a2)
  3096.     add.w    d3,a2
  3097.  
  3098.     clr.l    d1
  3099.     move.w    (a1)+,d1
  3100.     lsl.l    #4,d1
  3101.     or.l    d1,(a2)
  3102.     add.w    d3,a2
  3103.  
  3104.     clr.l    d1
  3105.     move.w    (a1)+,d1
  3106.     lsl.l    #4,d1
  3107.     or.l    d1,(a2)
  3108.     add.w    d3,a2
  3109.  
  3110.     clr.l    d1
  3111.     move.w    (a1)+,d1
  3112.     lsl.l    #4,d1
  3113.     or.l    d1,(a2)
  3114.     add.w    d3,a2                ; add. 2 lines
  3115.  
  3116.     clr.l    d1
  3117.     move.w    (a1)+,d1
  3118.     lsl.l    #4,d1
  3119.     or.l    d1,(a2)
  3120.     add.w    d3,a2
  3121.  
  3122.     clr.l    d1
  3123.     move.w    (a1)+,d1
  3124.     lsl.l    #4,d1
  3125.     or.l    d1,(a2)
  3126.  
  3127.     move.l    d4,a2
  3128. %3:
  3129.     endm
  3130.  
  3131.     macro    lpos4
  3132.  
  3133.     clr.l    d0
  3134.     move.b    (a3)+,d0
  3135.     cmpi.w    #32,d0
  3136.     bge.s    %2
  3137.  
  3138.     and.b    #$c,d0
  3139.     lea        _fontarr,a1
  3140.     lsl.w    #2,d0
  3141.     move.l    (a1,d0.w),a4
  3142.  
  3143.     lea        _fontskiparr,a1
  3144.     move.l    (a1,d0.w),_skiptest
  3145.     
  3146.     bra        %3
  3147.  
  3148. %2:
  3149.     move.l    _skiptest,a1
  3150.     tst.b    (a1,d0.l)
  3151.     bne.s    %3
  3152.  
  3153.     lsl.l    #1,d0
  3154.     move.l    _chofftab9,a1
  3155.     move.w    (a1,d0.l),d0
  3156. ;    add.w    #4,d0
  3157.  
  3158.     move.l    a2,d4
  3159.     add.w    #%1,a2
  3160.  
  3161.     move.l    (a4),a1
  3162.     add.l    d0,a1
  3163.  
  3164.     move.w    (a1)+,d1
  3165.     or.w    d1,(a2)
  3166.     add.w    d3,a2
  3167.  
  3168.     move.w    (a1)+,d1
  3169.     or.w    d1,(a2)
  3170.     add.w    d3,a2
  3171.  
  3172.     move.w    (a1)+,d1
  3173.     or.w    d1,(a2)
  3174.     add.w    d3,a2
  3175.  
  3176.     move.w    (a1)+,d1
  3177.     or.w    d1,(a2)
  3178.     add.w    d3,a2
  3179.  
  3180.     move.w    (a1)+,d1
  3181.     or.w    d1,(a2)
  3182.     add.w    d3,a2
  3183.  
  3184.     move.w    (a1)+,d1
  3185.     or.w    d1,(a2)
  3186.     add.w    d3,a2
  3187.  
  3188.     move.w    (a1)+,d1
  3189.     or.w    d1,(a2)
  3190.     add.w    d3,a2
  3191.  
  3192.     move.w    (a1)+,d1
  3193.     or.w    d1,(a2)
  3194.     add.w    d3,a2
  3195.  
  3196.     move.w    (a1)+,d1
  3197.     or.w    d1,(a2)
  3198.     add.w    d3,a2                ; add. 2 lines
  3199.  
  3200.     move.w    (a1)+,d1
  3201.     or.w    d1,(a2)
  3202.     add.w    d3,a2
  3203.  
  3204.     move.w    (a1)+,d1
  3205.     or.w    d1,(a2)
  3206.  
  3207.     move.l    d4,a2
  3208. %3:
  3209.     endm
  3210.  
  3211.     macro    lpos5
  3212.  
  3213.     clr.l    d0
  3214.     move.b    (a3)+,d0
  3215.     cmpi.w    #32,d0
  3216.     bge.s    %2
  3217.  
  3218.     and.b    #$c,d0
  3219.     lea        _fontarr,a1
  3220.     lsl.w    #2,d0
  3221.     move.l    (a1,d0.w),a4
  3222.  
  3223.     lea        _fontskiparr,a1
  3224.     move.l    (a1,d0.w),_skiptest
  3225.     
  3226.     bra        %3
  3227.  
  3228. %2:
  3229.     move.l    _skiptest,a1
  3230.     tst.b    (a1,d0.l)
  3231.     bne.s    %3
  3232.  
  3233.     lsl.l    #1,d0
  3234.     move.l    _chofftab9,a1
  3235.     move.w    (a1,d0.l),d0
  3236. ;    add.w    #4,d0
  3237.  
  3238.     move.l    a2,d4
  3239.     add.w    #%1,a2
  3240.     
  3241.     move.l    4(a4),a1
  3242.     add.l    d0,a1
  3243.     clr.w    d1
  3244.  
  3245.     move.b    (a1),d1
  3246.     or.w    d1,(a2)
  3247.     add.w    d3,a2
  3248.  
  3249.     move.b    2(a1),d1
  3250.     or.w    d1,(a2)
  3251.     add.w    d3,a2
  3252.  
  3253.     move.b    4(a1),d1
  3254.     or.w    d1,(a2)
  3255.     add.w    d3,a2
  3256.  
  3257.     move.b    6(a1),d1
  3258.     or.w    d1,(a2)
  3259.     add.w    d3,a2
  3260.  
  3261.     move.b    8(a1),d1
  3262.     or.w    d1,(a2)
  3263.     add.w    d3,a2
  3264.  
  3265.     move.b    10(a1),d1
  3266.     or.w    d1,(a2)
  3267.     add.w    d3,a2
  3268.  
  3269.     move.b    12(a1),d1
  3270.     or.w    d1,(a2)
  3271.     add.w    d3,a2
  3272.  
  3273.     move.b    14(a1),d1
  3274.     or.w    d1,(a2)
  3275.     add.w    d3,a2
  3276.  
  3277.     move.b    16(a1),d1
  3278.     or.w    d1,(a2)
  3279.     add.w    d3,a2                ; add. 2 lines
  3280.  
  3281.     move.b    18(a1),d1
  3282.     or.w    d1,(a2)
  3283.     add.w    d3,a2
  3284.  
  3285.     move.b    20(a1),d1
  3286.     or.w    d1,(a2)
  3287.  
  3288.     move.l    d4,a2
  3289. %3:
  3290.     endm
  3291.  
  3292.     macro    lpos6
  3293.  
  3294.     clr.l    d0
  3295.     move.b    (a3)+,d0
  3296.     cmpi.w    #32,d0
  3297.     bge.s    %2
  3298.  
  3299.     and.b    #$c,d0
  3300.     lea        _fontarr,a1
  3301.     lsl.w    #2,d0
  3302.     move.l    (a1,d0.w),a4
  3303.  
  3304.     lea        _fontskiparr,a1
  3305.     move.l    (a1,d0.w),_skiptest
  3306.     
  3307.     bra        %3
  3308.  
  3309. %2:
  3310.     move.l    _skiptest,a1
  3311.     tst.b    (a1,d0.l)
  3312.     bne.s    %3
  3313.  
  3314.     lsl.l    #1,d0
  3315.     move.l    _chofftab9,a1
  3316.     move.w    (a1,d0.l),d0
  3317. ;    add.w    #4,d0
  3318.  
  3319.     move.l    a2,d4
  3320.     add.w    #%1,a2
  3321.     
  3322.     move.l    4(a4),a1
  3323.     add.l    d0,a1
  3324.  
  3325.     clr.l    d1
  3326.     move.w    (a1)+,d1
  3327.     lsl.l    #2,d1
  3328.     or.l    d1,(a2)
  3329.     add.w    d3,a2
  3330.  
  3331.     clr.l    d1
  3332.     move.w    (a1)+,d1
  3333.     lsl.l    #2,d1
  3334.     or.l    d1,(a2)
  3335.     add.w    d3,a2
  3336.  
  3337.     clr.l    d1
  3338.     move.w    (a1)+,d1
  3339.     lsl.l    #2,d1
  3340.     or.l    d1,(a2)
  3341.     add.w    d3,a2
  3342.  
  3343.     clr.l    d1
  3344.     move.w    (a1)+,d1
  3345.     lsl.l    #2,d1
  3346.     or.l    d1,(a2)
  3347.     add.w    d3,a2
  3348.  
  3349.     clr.l    d1
  3350.     move.w    (a1)+,d1
  3351.     lsl.l    #2,d1
  3352.     or.l    d1,(a2)
  3353.     add.w    d3,a2
  3354.  
  3355.     clr.l    d1
  3356.     move.w    (a1)+,d1
  3357.     lsl.l    #2,d1
  3358.     or.l    d1,(a2)
  3359.     add.w    d3,a2
  3360.  
  3361.     clr.l    d1
  3362.     move.w    (a1)+,d1
  3363.     lsl.l    #2,d1
  3364.     or.l    d1,(a2)
  3365.     add.w    d3,a2
  3366.  
  3367.     clr.l    d1
  3368.     move.w    (a1)+,d1
  3369.     lsl.l    #2,d1
  3370.     or.l    d1,(a2)
  3371.     add.w    d3,a2
  3372.  
  3373.     clr.l    d1
  3374.     move.w    (a1)+,d1
  3375.     lsl.l    #2,d1
  3376.     or.l    d1,(a2)
  3377.     add.w    d3,a2                ; add. 2 lines
  3378.  
  3379.     clr.l    d1
  3380.     move.w    (a1)+,d1
  3381.     lsl.l    #2,d1
  3382.     or.l    d1,(a2)
  3383.     add.w    d3,a2
  3384.  
  3385.     clr.l    d1
  3386.     move.w    (a1)+,d1
  3387.     lsl.l    #2,d1
  3388.     or.l    d1,(a2)
  3389.  
  3390.     move.l    d4,a2
  3391. %3:
  3392.     endm
  3393.  
  3394.     macro    lpos7
  3395.  
  3396.     clr.l    d0
  3397.     move.b    (a3)+,d0
  3398.     cmpi.w    #32,d0
  3399.     bge.s    %2
  3400.  
  3401.     and.b    #$c,d0
  3402.     lea        _fontarr,a1
  3403.     lsl.w    #2,d0
  3404.     move.l    (a1,d0.w),a4
  3405.  
  3406.     lea        _fontskiparr,a1
  3407.     move.l    (a1,d0.w),_skiptest
  3408.     
  3409.     bra        %3
  3410.  
  3411. %2:
  3412.     move.l    _skiptest,a1
  3413.     tst.b    (a1,d0.l)
  3414.     bne.s    %3
  3415.  
  3416.     lsl.l    #1,d0
  3417.     move.l    _chofftab9,a1
  3418.     move.w    (a1,d0.l),d0
  3419. ;    add.w    #4,d0
  3420.  
  3421.     move.l    a2,d4
  3422.     add.w    #%1,a2
  3423.  
  3424.     move.l    (a4),a1
  3425.     add.l    d0,a1
  3426.  
  3427.     move.w    (a1)+,d1
  3428.     lsr.w   #2,d1
  3429.     or.w    d1,(a2)
  3430.     add.w    d3,a2
  3431.  
  3432.     move.w    (a1)+,d1
  3433.     lsr.w   #2,d1
  3434.     or.w    d1,(a2)
  3435.     add.w    d3,a2
  3436.  
  3437.     move.w    (a1)+,d1
  3438.     lsr.w   #2,d1
  3439.     or.w    d1,(a2)
  3440.     add.w    d3,a2
  3441.  
  3442.     move.w    (a1)+,d1
  3443.     lsr.w   #2,d1
  3444.     or.w    d1,(a2)
  3445.     add.w    d3,a2
  3446.  
  3447.     move.w    (a1)+,d1
  3448.     lsr.w   #2,d1
  3449.     or.w    d1,(a2)
  3450.     add.w    d3,a2
  3451.  
  3452.     move.w    (a1)+,d1
  3453.     lsr.w   #2,d1
  3454.     or.w    d1,(a2)
  3455.     add.w    d3,a2
  3456.  
  3457.     move.w    (a1)+,d1
  3458.     lsr.w   #2,d1
  3459.     or.w    d1,(a2)
  3460.     add.w    d3,a2
  3461.  
  3462.     move.w    (a1)+,d1
  3463.     lsr.w   #2,d1
  3464.     or.w    d1,(a2)
  3465.     add.w    d3,a2
  3466.  
  3467.     move.w    (a1)+,d1
  3468.     lsr.w   #2,d1
  3469.     or.w    d1,(a2)
  3470.     add.w    d3,a2                ; add. 2 lines
  3471.  
  3472.     move.w    (a1)+,d1
  3473.     lsr.w   #2,d1
  3474.     or.w    d1,(a2)
  3475.     add.w    d3,a2
  3476.  
  3477.     move.w    (a1)+,d1
  3478.     lsr.w   #2,d1
  3479.     or.w    d1,(a2)
  3480.  
  3481.     move.l    d4,a2
  3482. %3:
  3483.     endm
  3484.  
  3485. zapline:
  3486.         lpos0    -2,l1,s1
  3487.         lpos1    0,l2,s2
  3488.         lpos2    0,l3,s3
  3489.         lpos3    0,l4,s4
  3490.         lpos4    2,l5,s5
  3491.         lpos5    2,l6,s6
  3492.         lpos6    2,l7,s7
  3493.         lpos7    4,l8,s8
  3494.         lpos0    4,l9,s9
  3495.         lpos1    6,l10,s10
  3496.         lpos2    6,l11,s11
  3497.         lpos3    6,l12,s12
  3498.         lpos4    8,l13,s13
  3499.         lpos5    8,l14,s14
  3500.         lpos6    8,l15,s15
  3501.         lpos7    10,l16,s16
  3502.         lpos0    10,l17,s17
  3503.         lpos1    12,l18,s18
  3504.         lpos2    12,l19,s19
  3505.         lpos3    12,l20,s20
  3506.         lpos4    14,l21,s21
  3507.         lpos5    14,l22,s22
  3508.         lpos6    14,l23,s23
  3509.         lpos7    16,l24,s24
  3510.         lpos0    16,l25,s25
  3511.         lpos1    18,l26,s26
  3512.         lpos2    18,l27,s27
  3513.         lpos3    18,l28,s28
  3514.         lpos4    20,l29,s29
  3515.         lpos5    20,l30,s30
  3516.         lpos6    20,l31,s31
  3517.         lpos7    22,l32,s32
  3518.         lpos0    22,l33,s33
  3519.         lpos1    24,l34,s34
  3520.         lpos2    24,l35,s35
  3521.         lpos3    24,l36,s36
  3522.         lpos4    26,l37,s37
  3523.         lpos5    26,l38,s38
  3524.         lpos6    26,l39,s39
  3525.         lpos7    28,l40,s40
  3526.         lpos0    28,l41,s41
  3527.         lpos1    30,l42,s42
  3528.         lpos2    30,l43,s43
  3529.         lpos3    30,l44,s44
  3530.         lpos4    32,l45,s45
  3531.         lpos5    32,l46,s46
  3532.         lpos6    32,l47,s47
  3533.         lpos7    34,l48,s48
  3534.         lpos0    34,l49,s49
  3535.         lpos1    36,l50,s50
  3536.         lpos2    36,l51,s51
  3537.         lpos3    36,l52,s52
  3538.         lpos4    38,l53,s53
  3539.         lpos5    38,l54,s54
  3540.         lpos6    38,l55,s55
  3541.         lpos7    40,l56,s56
  3542.         lpos0    40,l57,s57
  3543.         lpos1    42,l58,s58
  3544.         lpos2    42,l59,s59
  3545.         lpos3    42,l60,s60
  3546.         lpos4    44,l61,s61
  3547.         lpos5    44,l62,s62
  3548.         lpos6    44,l63,s63
  3549.         lpos7    46,l64,s64
  3550.         lpos0    46,l65,s65
  3551.         lpos1    48,l66,s66
  3552.         lpos2    48,l67,s67
  3553.         lpos3    48,l68,s68
  3554.         lpos4    50,l69,s69
  3555.         lpos5    50,l70,s70
  3556.         lpos6    50,l71,s71
  3557.         lpos7    52,l72,s72
  3558.         lpos0    52,l73,s73
  3559.         lpos1    54,l74,s74
  3560.         lpos2    54,l75,s75
  3561.         lpos3    54,l76,s76
  3562.         lpos4    56,l77,s77
  3563.         lpos5    56,l78,s78
  3564.         lpos6    56,l79,s79
  3565.         lpos7    58,l80,s80
  3566.  
  3567.          rts
  3568.  
  3569.  
  3570. ;    clear an 12 scan line font
  3571.  
  3572. b160:    reg        d3-d7
  3573. b128:    reg        d4-d7
  3574.  
  3575. _clr11:
  3576. _clrit:
  3577.  
  3578.         move.l    a2,a0
  3579.  
  3580.         move.w    #$ffc0,d0
  3581.         move.l    #$03f,d1
  3582.  
  3583.         clr.l    d3
  3584.         clr.l    d4
  3585.         clr.l    d5
  3586.         clr.l    d6
  3587.         clr.l    d7
  3588.  
  3589.         and.w    d0,-2(a0)
  3590.         movem.l    b160,(a0)
  3591.         add.l    #20,a0
  3592.         movem.l    b160,(a0)
  3593.         add.l    #20,a0
  3594.         movem.l    b128,(a0)
  3595.         add.l    #16,a0
  3596.         and.l    d1,(a0)+
  3597.         tst.l    (a0)+
  3598.         add.w    _screenrem,a0
  3599.         
  3600.         and.w    d0,-2(a0)
  3601.         movem.l    b160,(a0)
  3602.         add.l    #20,a0
  3603.         movem.l    b160,(a0)
  3604.         add.l    #20,a0
  3605.         movem.l    b128,(a0)
  3606.         add.l    #16,a0
  3607.         and.l    d1,(a0)+
  3608.         tst.l    (a0)+
  3609.         add.w    _screenrem,a0
  3610.  
  3611.         and.w    d0,-2(a0)
  3612.         movem.l    b160,(a0)
  3613.         add.l    #20,a0
  3614.         movem.l    b160,(a0)
  3615.         add.l    #20,a0
  3616.         movem.l    b128,(a0)
  3617.         add.l    #16,a0
  3618.         and.l    d1,(a0)+
  3619.         tst.l    (a0)+
  3620.         add.w    _screenrem,a0
  3621.  
  3622. ;        bra        clrcont
  3623.         
  3624. ;    clear an 9 scan line font
  3625.  
  3626. ;_clrit:
  3627. ;        move.l    a2,a0
  3628.  
  3629. ;        move.w    #$ffc0,d0
  3630. ;        move.l    #$03f,d1
  3631.  
  3632. ;        clr.l    d3
  3633. ;        clr.l    d4
  3634. ;        clr.l    d5
  3635. ;        clr.l    d6
  3636. ;        clr.l    d7
  3637.  
  3638. ;clrcont:
  3639.         and.w    d0,-2(a0)
  3640.         movem.l    b160,(a0)
  3641.         add.l    #20,a0
  3642.         movem.l    b160,(a0)
  3643.         add.l    #20,a0
  3644.         movem.l    b128,(a0)
  3645.         add.l    #16,a0
  3646.         and.l    d1,(a0)+
  3647.         tst.l    (a0)+
  3648.         add.w    _screenrem,a0
  3649.  
  3650.         and.w    d0,-2(a0)
  3651.         movem.l    b160,(a0)
  3652.         add.l    #20,a0
  3653.         movem.l    b160,(a0)
  3654.         add.l    #20,a0
  3655.         movem.l    b128,(a0)
  3656.         add.l    #16,a0
  3657.         and.l    d1,(a0)+
  3658.         tst.l    (a0)+
  3659.         add.w    _screenrem,a0
  3660.  
  3661.         and.w    d0,-2(a0)
  3662.         movem.l    b160,(a0)
  3663.         add.l    #20,a0
  3664.         movem.l    b160,(a0)
  3665.         add.l    #20,a0
  3666.         movem.l    b128,(a0)
  3667.         add.l    #16,a0
  3668.         and.l    d1,(a0)+
  3669.         tst.l    (a0)+
  3670.         add.w    _screenrem,a0
  3671.  
  3672.         and.w    d0,-2(a0)
  3673.         movem.l    b160,(a0)
  3674.         add.l    #20,a0
  3675.         movem.l    b160,(a0)
  3676.         add.l    #20,a0
  3677.         movem.l    b128,(a0)
  3678.         add.l    #16,a0
  3679.         and.l    d1,(a0)+
  3680.         tst.l    (a0)+
  3681.         add.w    _screenrem,a0
  3682.  
  3683.         and.w    d0,-2(a0)
  3684.         movem.l    b160,(a0)
  3685.         add.l    #20,a0
  3686.         movem.l    b160,(a0)
  3687.         add.l    #20,a0
  3688.         movem.l    b128,(a0)
  3689.         add.l    #16,a0
  3690.         and.l    d1,(a0)+
  3691.         tst.l    (a0)+
  3692.         add.w    _screenrem,a0
  3693.  
  3694.         and.w    d0,-2(a0)
  3695.         movem.l    b160,(a0)
  3696.         add.l    #20,a0
  3697.         movem.l    b160,(a0)
  3698.         add.l    #20,a0
  3699.         movem.l    b128,(a0)
  3700.         add.l    #16,a0
  3701.         and.l    d1,(a0)+
  3702.         tst.l    (a0)+
  3703.         add.w    _screenrem,a0
  3704.  
  3705.         and.w    d0,-2(a0)
  3706.         movem.l    b160,(a0)
  3707.         add.l    #20,a0
  3708.         movem.l    b160,(a0)
  3709.         add.l    #20,a0
  3710.         movem.l    b128,(a0)
  3711.         add.l    #16,a0
  3712.         and.l    d1,(a0)+
  3713.         tst.l    (a0)+
  3714.         add.w    _screenrem,a0
  3715.  
  3716.         and.w    d0,-2(a0)
  3717.         movem.l    b160,(a0)
  3718.         add.l    #20,a0
  3719.         movem.l    b160,(a0)
  3720.         add.l    #20,a0
  3721.         movem.l    b128,(a0)
  3722.         add.l    #16,a0
  3723.         and.l    d1,(a0)+
  3724.         tst.l    (a0)+
  3725.         add.w    _screenrem,a0
  3726.  
  3727.         and.w    d0,-2(a0)
  3728.         movem.l    b160,(a0)
  3729.         add.l    #20,a0
  3730.         movem.l    b160,(a0)
  3731.         add.l    #20,a0
  3732.         movem.l    b128,(a0)
  3733.         add.l    #16,a0
  3734.         and.l    d1,(a0)+
  3735.  
  3736.         move.w    _screenbytes,d3                ; restore bytes in screen width
  3737.         rts
  3738.  
  3739.  
  3740. scrollregs:    reg    a3/d4-d7
  3741.  
  3742. ;    kevin eric saunders
  3743. ;     scrolls a 19 pt font including all lines 
  3744.  
  3745. _fastindex
  3746.  
  3747. ;    fastindex(dest, src, count);
  3748.  
  3749.     link    a6,#0
  3750.  
  3751.     movem.l    scrollregs,-(sp)        ;; push regs (aztec c uses)
  3752.     
  3753.     move.l    8(a6),a2        ;; a2 -> target to be obliterated
  3754.     move.l    12(a6),a3        ;; a3 -> source
  3755.     move.w    16(a6),d1        ;; d1 =  # of lines to move
  3756.     sub.w    #1,d1            ;; predecrement for dbra
  3757.     
  3758.     move.w    _fontwidth,d2
  3759.     cmp.w    #8,d2            ;; 8 bits wide?
  3760.     bne.s    _index11        ;; do the 6 bit routine
  3761.     
  3762. _index19
  3763.  
  3764.     move.l    #18,d0            ;; # of scan lines per line, predecremented for dbra
  3765.     move.w    #38,d2            ;; # of lines to back up each time
  3766.     mulu    _screenbytes,d2        ;; # of bytes required
  3767.  
  3768. index19dupline:
  3769.     
  3770.     ; move the line
  3771.     movem.l    (a3)+,b160
  3772.     movem.l    b160,(a2)
  3773.     add.l    #20,a2
  3774.  
  3775.     movem.l    (a3)+,b160
  3776.     movem.l    b160,(a2)
  3777.     add.l    #20,a2
  3778.  
  3779.     movem.l    (a3)+,b160
  3780.     movem.l    b160,(a2)
  3781.     add.l    #20,a2
  3782.  
  3783.     movem.l    (a3)+,b160
  3784.     movem.l    b160,(a2)
  3785.     add.l    #20,a2
  3786.  
  3787.     ; wrap to the next line 
  3788.     add.w    _screenrem,a2
  3789.     add.w    _screenrem,a3
  3790.     sub.w    #16,a2                    ; fix screenrem for 80 byte wide screen 
  3791.     sub.w    #16,a3
  3792.  
  3793.     dbra    d0,index19dupline
  3794.  
  3795.     ; this is dumb but it will work:  back up to copy the next line down
  3796.     sub.w    d2,a2
  3797.     sub.w    d2,a3
  3798.  
  3799.     move.l    #18,d0            ;; # of scan lines to move, predecremented for dbra
  3800.  
  3801.     dbra    d1,index19dupline
  3802.  
  3803.     jsr        _clr19                    ;; a2 = scan line to erase
  3804.  
  3805.     movem.l    (sp)+,scrollregs        ;; pop regs
  3806.  
  3807.     unlk    a6
  3808.     rts
  3809.  
  3810.  
  3811. ;     indexes an 12 pt font including everything
  3812.  
  3813. _index11
  3814.  
  3815.     move.l    #11,d0            ;; # of scan lines per line, predecremented for dbra
  3816.     sub.l    #2,a2            ;; correct for shift on the screen
  3817.     sub.l    #2,a3            ;; correct for shift on the screen
  3818.  
  3819. indexdupline:
  3820.  
  3821. ;; fix the first word which has irrelevant stuff
  3822.     movem.l    (a3)+,b160        ;; grab the first bunch from below
  3823.     andi.l    #$3fffff,d3        ;; mask off the left end
  3824.     move.l    (a2),d2            ;; get the first word to mask
  3825.     and.l    #$ffc00000,d2    ;; mask off the right end
  3826.     or.l    d2,d3            ;; now combine them
  3827.     movem.l    b160,(a2)        ;; and move them up
  3828.     add.l    #20,a2
  3829.  
  3830. ;; now do the middle, no masking needed
  3831.     movem.l    (a3)+,b160
  3832.     movem.l    b160,(a2)
  3833.     add.l    #20,a2
  3834.  
  3835.     movem.l    (a3)+,b160
  3836.     movem.l    b160,(a2)
  3837.     add.l    #20,a2
  3838.  
  3839. ;; and then do the word at the end, masking the right end of it
  3840.     move.w    (a2),d2
  3841.     andi.w    #$3f,d2
  3842.     move.w    (a3)+,d3
  3843.     andi.w    #$ffc0,d3
  3844.     or.w    d2,d3
  3845.     move.w    d3,(a2)+
  3846.  
  3847. ;; step around the next word to the beginning of the next line
  3848.     addq.l    #2,a2
  3849.     addq.l    #2,a3
  3850.  
  3851.     add.w    _screenrem,a2
  3852.     add.w    _screenrem,a3
  3853.  
  3854.     dbra    d0,indexdupline
  3855.  
  3856.     ; this is dumb but it will work:  index up to copy the next line down
  3857.     move.w    #24,d2            ;; # of lines to back up each time
  3858.     mulu    _screenbytes,d2        ;; # of bytes required
  3859.     sub.w    d2,a2
  3860.     sub.w    d2,a3
  3861.     
  3862.     move.l    #11,d0        ;; # of scan lines to move, predecremented for dbra
  3863.  
  3864.     dbra    d1,indexdupline
  3865.  
  3866.     add.l    #2,a2            ;; un-correct screen shift
  3867.     jsr        _clr11            ;; wants cleared regs, a2 = scan line to erase
  3868.  
  3869.     movem.l    (sp)+,scrollregs        ;; pop regs
  3870.  
  3871.     unlk    a6
  3872.     rts
  3873.     
  3874.     
  3875.  
  3876. _fastscroll
  3877.  
  3878. ;    fastscroll(dest, src, count);
  3879.  
  3880.     link    a6,#0
  3881.  
  3882.     movem.l    scrollregs,-(sp)        ;; push regs (aztec c uses)
  3883.     
  3884.     move.l    8(a6),a2        ;; a2 -> target to be obliterated
  3885.     move.l    12(a6),a3        ;; a3 -> source
  3886.     move.w    16(a6),d1        ;; d1 =  # of lines to move
  3887.     sub.w    #1,d1            ;; predecrement for dbra
  3888.     
  3889.     move.w    _fontwidth,d2
  3890.     cmp.w    #8,d2            ;; 8 bits wide?
  3891.     bne.s    _scroll11        ;; do the 6 bit routine
  3892.     
  3893. _scroll19
  3894.  
  3895.     move.l    #18,d0            ;; # of scan lines per line, predecremented for dbra
  3896.  
  3897. scr19dupline:
  3898.     
  3899.     ; move the line
  3900.     movem.l    (a3)+,b160
  3901.     movem.l    b160,(a2)
  3902.     add.l    #20,a2
  3903.  
  3904.     movem.l    (a3)+,b160
  3905.     movem.l    b160,(a2)
  3906.     add.l    #20,a2
  3907.  
  3908.     movem.l    (a3)+,b160
  3909.     movem.l    b160,(a2)
  3910.     add.l    #20,a2
  3911.  
  3912.     movem.l    (a3)+,b160
  3913.     movem.l    b160,(a2)
  3914.     add.l    #20,a2
  3915.  
  3916.     ; wrap to the next line 
  3917.     add.w    _screenrem,a2
  3918.     add.w    _screenrem,a3
  3919.     sub.w    #16,a2                    ; fix screenrem for 80 byte wide screen 
  3920.     sub.w    #16,a3
  3921.  
  3922.     dbra    d0,scr19dupline
  3923.  
  3924.     move.l    #18,d0            ;; # of scan lines to move, predecremented for dbra
  3925.  
  3926.     dbra    d1,scr19dupline
  3927.  
  3928.     jsr        _clr19                    ;; a2 = scan line to erase
  3929.  
  3930.     movem.l    (sp)+,scrollregs        ;; pop regs
  3931.  
  3932.     unlk    a6
  3933.     rts
  3934.  
  3935.  
  3936. ;     clears the last line for a 19 pt font
  3937.  
  3938. _clr19
  3939.  
  3940.     clr.l    d3
  3941.     clr.l    d4
  3942.     clr.l    d5
  3943.     clr.l    d6
  3944.     clr.l    d7
  3945.     
  3946.     move.l    #18,d0            ;; # of scan lines per line, predecremented for dbra
  3947.  
  3948. scrclrline:
  3949.     
  3950.     ; clear the line
  3951.     movem.l    b160,(a2)
  3952.     add.l    #20,a2
  3953.     movem.l    b160,(a2)
  3954.     add.l    #20,a2
  3955.     movem.l    b160,(a2)
  3956.     add.l    #20,a2
  3957.     movem.l    b160,(a2)
  3958.     add.l    #20,a2
  3959.  
  3960.     ; wrap to the next line 
  3961.     add.w    _screenrem,a2
  3962.     sub.w    #16,a2                ; fix screenrem for 80 byte wide
  3963.  
  3964.     dbra    d0,scrclrline
  3965.  
  3966.     rts
  3967.  
  3968.  
  3969. ;     scrolls an 12 pt font including everything
  3970.  
  3971. _scroll11
  3972.  
  3973.     move.l    #11,d0            ;; # of scan lines per line, predecremented for dbra
  3974.     sub.l    #2,a2            ;; correct for shift on the screen
  3975.     sub.l    #2,a3            ;; correct for shift on the screen
  3976.  
  3977. scrdupline:
  3978.  
  3979. ;; fix the first word which has irrelevant stuff
  3980.     movem.l    (a3)+,b160        ;; grab the first bunch from below
  3981.     andi.l    #$3fffff,d3        ;; mask off the left end
  3982.     move.l    (a2),d2            ;; get the first word to mask
  3983.     and.l    #$ffc00000,d2    ;; mask off the right end
  3984.     or.l    d2,d3            ;; now combine them
  3985.     movem.l    b160,(a2)        ;; and move them up
  3986.     add.l    #20,a2
  3987.  
  3988. ;; now do the middle, no masking needed
  3989.     movem.l    (a3)+,b160
  3990.     movem.l    b160,(a2)
  3991.     add.l    #20,a2
  3992.  
  3993.     movem.l    (a3)+,b160
  3994.     movem.l    b160,(a2)
  3995.     add.l    #20,a2
  3996.  
  3997. ;; and then do the word at the end, masking the right end of it
  3998.     move.w    (a2),d2
  3999.     andi.w    #$3f,d2
  4000.     move.w    (a3)+,d3
  4001.     andi.w    #$ffc0,d3
  4002.     or.w    d2,d3
  4003.     move.w    d3,(a2)+
  4004.  
  4005. ;; step around the next word to the beginning of the next line
  4006.     addq.l    #2,a2
  4007.     addq.l    #2,a3
  4008.  
  4009.     add.w    _screenrem,a2
  4010.     add.w    _screenrem,a3
  4011.  
  4012.     dbra    d0,scrdupline
  4013.  
  4014. ;;we skipped the next scan line (leading) when we did a scroll11
  4015.     ; add.w    _screenbytes,a2
  4016.     ; add.w    _screenbytes,a3
  4017.  
  4018.     move.l    #11,d0        ;; # of scan lines to move, predecremented for dbra
  4019.  
  4020.     dbra    d1,scrdupline
  4021.  
  4022.     add.l    #2,a2            ;; un-correct screen shift
  4023.     jsr        _clr11            ;; wants cleared regs, a2 = scan line to erase
  4024.  
  4025.     movem.l    (sp)+,scrollregs        ;; pop regs
  4026.  
  4027.     unlk    a6
  4028.     rts
  4029.     
  4030.     
  4031. _vtzapline:
  4032. vtsavregs:    reg        d4-d7/a3/a4
  4033.     ; we use the superoptimized 3270 line drawer in a special case...
  4034.     ;    we can be confident the font will not be reset because
  4035.     ;    there are no 3270 attributes (# < 32) in an ASCII screen....\
  4036.  
  4037.     ; d3 = screen width in bytes
  4038.     ; a2 -> starting offset of line on physical screen
  4039.     ; a3 -> emulator character array
  4040.     ; a4 -> font
  4041.  
  4042.         link    a6,#0
  4043.         movem.l    vtsavregs,-(sp)
  4044.  
  4045.         move.l    8(a6),a3            ; a3 -> text 
  4046.         move.l    12(a6),a2            ; a2 -> screen
  4047.  
  4048.         move.w    _screenbytes,d3        ; d3 = width of screen
  4049.  
  4050.         tst.l    16(a6)
  4051.         bne.s    vtzapcleared
  4052.         
  4053.         jsr        _clr11                ; clear the line (preserves d3)
  4054.  
  4055. vtzapcleared:
  4056.         add.w    d3,a2
  4057.         add.w    d3,a2                ; fix a2 for 9 point font routine; skip 2 lines
  4058.         move.l    _thefont,a4            ; 0(a4) -> table 1   4(a4) -> table 2
  4059.         jsr        zapline
  4060.         
  4061.         movem.l    (sp)+,vtsavregs
  4062.         unlk    a6
  4063.         rts
  4064.  
  4065.